610 likes | 901 Vues
Documentum Lifecycles. Using Lifecycles To Trigger External Events. Introduction. Robert Harper / Anheuser – Busch Training and Development Group Robert.Harper@Anheuser-Busch.com Robert.Harper@IEEE.org. Introduction – Our Agenda. External Application Server
E N D
Documentum Lifecycles Using Lifecycles To Trigger External Events
Introduction Robert Harper / Anheuser – Busch Training and Development Group Robert.Harper@Anheuser-Busch.com Robert.Harper@IEEE.org
Introduction – Our Agenda • External Application Server • Downloads a file from Documentum • Manipulates the file • Places the new file in Documentum • External Web Server • Makes selected Documentum content available via the web.
Introduction – Our Agenda • Gathering The Pieces • Lifecycles • Lifecycle Procedures • AutoRender Pro As Model For The External Server • Putting The Pieces Together
Our Agenda • Gathering The Pieces • Lifecycles • Lifecycle Procedures • AutoRender Pro As Model For The External Server • Putting The Pieces Together
Our Agenda • Gathering The Pieces • Lifecycles • Lifecycle Procedures • AutoRender Pro As Model For The External Server • Putting The Pieces Together
Our Agenda • Gathering The Pieces • Lifecycles • Lifecycle Procedures • AutoRender Pro As Model For The External Server • Putting The Pieces Together
AutoRender Pro - Requesting A PDF Rendition TRACE: Rendering PS_PDF request Start Time: 2/22/2004 12:30:18 PM | Processing: Course Catalog Issue | Docbase = MyDocbase // Queue = dm_autorender_win31 // Sent By = dmadmin TRACE: MoveFile from file: C:\Documents and Settings\Administrator\dmcl\00009753\abtdgdev003\800187 80\Course Catalog Issue.doc To file: c:\dmautop\temp\Course Catalog Issue.doc TRACE: Generating OLE automation: ARPGENERIC.WORDDOC | TRACE: Attempting to perform rendering via plugin: ARPGENERIC.WORDDOC Word Render, Maximum wait interval is 10 seconds
AutoRender Pro - Requesting A PDF Rendition | Generating PS from Word (OLE) | TRACE: Checking for file: C:\DISTASST.PS | TRACE: File C:\DISTASST.PS is ok to open....continue | TRACE: MoveFile from file: C:\DISTASST.PS To file: c:\dmautop\temp\7.PS | TRACE: Checking for file: c:\dmautop\temp\7.LOG | TRACE: Checking for file: c:\dmautop\temp\7.PDF | TRACE: File c:\dmautop\temp\7.LOG is ok to open....continue | TRACE: Checking for file: c:\dmautop\temp\7.LOG | TRACE: File c:\dmautop\temp\7.LOG is ok to open....continue
AutoRender Pro - Requesting A PDF Rendition | | TRACE: Checking for file: c:\dmautop\temp\7.PDF | TRACE: File c:\dmautop\temp\7.PDF is ok to open....continue | TRACE: Generating PDT | TRACE: Created AcroExch.app object | TRACE: Created AcroExch.AVDoc object | TRACE: PDF Text Render, Maximum wait interval is 10 seconds | TRACE: PDF not linearized....optimizing | TRACE: Setting pdf attributes | TRACE: ResetExitTimer | PDF rendition created
AutoRender Pro - Requesting A PDF Rendition • Here we find the PDF request • # [ 1256 ] Wed Feb 18 09:24:31 2004 765000 ( 0.000 sec) ( 45 rpc) API> execquery,s0,T,select stamp,message,content_type,item_id,item_name,sent_by, date_sent, router_id from dm_queue where name = 'dm_autorender_win31' and message = 'rendition_req_ps_pdf' order by date_sent • # [ 1256 ] Wed Feb 18 09:24:31 2004 765000 ( 0.000 sec) ( 45 rpc) Server RPC: EXEC (0000000000000000) select stamp,message,content_type,item_id,item_name,sent_by, date_sent, router_id from dm_queue where name = 'dm_autorender_win31' and message = 'rendition_req_ps_pdf' order by date_sent • # [ 1256 ] Wed Feb 18 09:24:31 2004 875000 ( 0.110 sec) ( 46 rpc) Res: 'OK' • # [ 1256 ] Wed Feb 18 09:24:31 2004 875000 ( 0.000 sec) ( 46 rpc) API> getlastcoll,s0 • # [ 1256 ] Wed Feb 18 09:24:31 2004 875000 ( 0.000 sec) ( 46 rpc) Res: 'q0' • # [ 1256 ] Wed Feb 18 09:24:31 2004 890000 ( 0.000 sec) ( 46 rpc) API> next,s0,q0 • # [ 1256 ] Wed Feb 18 09:24:31 2004 890000 ( 0.000 sec) ( 46 rpc) Server RPC: MultiNext (5) • # [ 1256 ] Wed Feb 18 09:24:31 2004 890000 ( 0.000 sec) ( 47 rpc) Res: 'OK'
AutoRender Pro - Requesting A PDF Rendition • # [ 1256 ] Wed Feb 18 09:24:31 2004 953000 ( 0.000 sec) ( 50 rpc) Res: 'Craycroft, Aaron' • # [ 1256 ] Wed Feb 18 09:24:31 2004 953000 ( 0.000 sec) ( 50 rpc) API> close,s0,q0 • # [ 1256 ] Wed Feb 18 09:24:31 2004 953000 ( 0.000 sec) ( 50 rpc) Server RPC: Close (5) • # [ 1256 ] Wed Feb 18 09:24:31 2004 953000 ( 0.000 sec) ( 51 rpc) Res: 'OK' • We've got the job, so now we dequeue it • # [ 1256 ] Wed Feb 18 09:24:31 2004 984000 ( 0.000 sec) ( 51 rpc)API> dequeue,s0,1b0097528000a5af • # [ 1256 ] Wed Feb 18 09:24:31 2004 984000 ( 0.000 sec) ( 51 rpc) Server RPC: InboxItemDelete (1b0097528000a5af) • # [ 1256 ] Wed Feb 18 09:24:32 2004 031000 ( 0.047 sec) ( 52 rpc) Res: 'OK' • # [ 1256 ] Wed Feb 18 09:24:32 2004 031000 ( 0.000 sec) ( 52 rpc) API> fetch,s0,0900975280052895 • # [ 1256 ] Wed Feb 18 09:24:32 2004 031000 ( 0.000 sec) ( 52 rpc) Server RPC: IsCurrent (0900975280052895)
AutoRender Pro - Requesting A PDF Rendition • get,s0,0900975280052895,a_compound_architecture • # [ 1256 ] Wed Feb 18 09:24:32 2004 328000 ( 0.000 sec) ( 64 rpc) Res: '' • So we now we finally go and get the Word document. • # [ 1256 ] Wed Feb 18 09:24:32 2004 328000 ( 0.000 sec) ( 64 rpc) API> getfile,s0,0900975280052895,,msw8 • # [ 1256 ] Wed Feb 18 09:24:32 2004 328000 ( 0.000 sec) ( 64 rpc) Server RPC: IsCurrent (0600975280032ab2) • # [ 1256 ] Wed Feb 18 09:24:32 2004 328000 ( 0.000 sec) ( 65 rpc) Server RPC: FetchType (dm_format) • # [ 1256 ] Wed Feb 18 09:24:32 2004 328000 ( 0.000 sec) ( 66 rpc) Server RPC: OBJECT_FROM_CACHE
AutoRender Pro - Requesting A PDF Rendition • # [ 1256 ] Wed Feb 18 09:24:40 2004 062000 ( 0.000 sec) ( 70 rpc) Server RPC: BEGIN_TRANS (0000000000000000) • # [ 1256 ] Wed Feb 18 09:24:40 2004 062000 ( 0.000 sec) ( 71 rpc) Res: 'OK' • And we put the rendition back up on the server • # [ 1256 ] Wed Feb 18 09:24:40 2004 078000 ( 0.000 sec) ( 71 rpc) API> addrendition,s0,0900975280052895,c:\dmautop\temp\3.PDF,pdf,,,T • # [ 1256 ] Wed Feb 18 09:24:40 2004 078000 ( 0.000 sec) ( 71 rpc) Server RPC: ID_FROM_CACHE (0000000000000000) • # [ 1256 ] Wed Feb 18 09:24:40 2004 078000 ( 0.000 sec) ( 72 rpc) Server RPC: OBJECT_FROM_CACHE (270097528000019d) • # [ 1256 ] Wed Feb 18 09:24:40 2004 078000 ( 0.000 sec) ( 73 rpc) Server RPC: FetchType (dm_store) • # [ 1256 ] Wed Feb 18 09:24:40 2004 078000 ( 0.000 sec) ( 74 rpc) Server RPC: ID_FROM_CACHE
What We Know • We know that lifecycles allow us to define different lifecycle states for our documents. • We know that the EntryRequirements, StateAction and PostProc procedures allow us to spell out what happens at each of those lifecycle states. • We know how to create a queue in our Docbase in which to place action requests. • We know how to place a job request in that queue. • We know how to build an external server that can: Communicate with the Docbase. Check a queue for job requests. Copy files out of Documentum on to a local hard drive. Place files back in the Docbase
Our Agenda Gathering The Pieces Putting The Pieces Together (REVIEW STATE) Creating the User Accounts and Queue Creating the Lifecycle Procedures Creating the Lifecycle Building The External Server
Our Agenda Gathering The Pieces Putting The Pieces Together (REVIEW STATE) Creating the User Accounts and Queue Creating the Lifecycle Procedures Creating the Lifecycle Building The External Server
Creating The Queue • # • execquery,c,T,CREATE dm_user OBJECTS • SET user_name = 'xy_publish_win2000', • SET user_os_name = 'xy_publish_win2000', • SET home_docbase= 'XYDOCBASE', • SET user_address = 'xy_publish_win2000', • SET client_capability = 8,(8 = System Administrator) • SET user_privileges = 8,(8 = Sysadmin) • SET description = 'XY Publishing Account' • close,c,q0 • #
Creating The User Account • execquery,c,T,CREATE dm_user OBJECTS • SET user_name = 'xy_communicate', • SET user_os_name ='dmacct123', • SET user_address = ‘dmacct123’, • SET home_docbase='MyDocbase', • SET default_folder = 'xy_communicate', • SET user_group_name = 'xy_creators', • SET client_capability = 4, • SET description = 'Our Publishing Account' • close,c,q0
Our Agenda Gathering The Pieces Putting The Pieces Together (REVIEW STATE) Creating the User Accounts and Queue Creating the Lifecycle Procedures Creating the Lifecycle Building The External Server
Creating The Procedures # First we create the entryrequirements procedure object create,c,dm_procedure set,c,l,object_name entryrequirements # And place it in the System/Procedures folder link,c,l,/System/Procedures # Next, we insert the code for the procedure from a text file setfile,c,l,entryrequirements.txt,text # And now we save it to the docbase save,c,l # Now we create our stateaction procedure object create,c,dm_procedure set,c,l,object_name stateaction # And place it in the System/Procedures folder link,c,l,/System/Procedures # Next, we insert the code for the procedure from a text file setfile,c,l,stateaction.txt,text # And now we save it to the docbase save,c,l # And finally we create our postprocessing procedure object create,c,dm_procedure set,c,l,object_name postproc # And place it in the System/Procedures folder link,c,l,/System/Procedures # Next, we insert the code for the procedure from a text file setfile,c,l,postproc.txt,text # And now we save it to the docbase save,c,l
Creating The Lifecycle Procedures • 'EntryCriteria Function • ' • Const REMOVE_ALL_VALUES As Integer = -1 • Const ADD_TO_END As Integer = -2 • ' • Public Function EntryCriteria _ • (ByVal SessionId As String, _ • ByVal ObjectId As String, _ • ByVal UserName As String, _ • ByVal TargetState As String, _ • ByRef ErrorStack As String) As Boolean • EntryCriteria = False • sttus$ = dmAPISet("set," & SessionId & "," & ObjectId & ",title", "DRAFT") • mssg$ = dmAPIGet("getmessage," & SessionId & ",3") • If (mssg <> "") Then • ErrorStack = mssg • Else • EntryCriteria = True • End If • End Function
Putting The PDF Request In Queue • 'Send a queue item to request that a • 'composite PDF be created • ErrorStack = "Send request for PDF Rendition" • rcs$ = dmAPIGet("queue," & SessionID & "," & • ObjectID & ",xy_publish_win2000, • CompositePDF,1,nulldate,null")
Our Agenda Gathering The Pieces Putting The Pieces Together (REVIEW STATE) Creating the User Accounts and Queue Creating the Lifecycle Procedures Creating the Lifecycle Building The External Server
Our Agenda Gathering The Pieces Putting The Pieces Together (REVIEW STATE) Creating the User Accounts and Queue Creating the Lifecycle Procedures Creating the Lifecycle Building The External Server