Hi,
I am using webtop 6.6, User has encountered a typical problem during the document import operation.
When import operation happens, it calls dmbasic procedure and applies life cycle through it. While importing it is throwing following error:
Error in Import Operation [DM_E_POLICY_ERROR_600]errors: User Action proc failed. Details: Illegal Procedure Call 'Action'.:Dmbasic:error:35
I have checked that the user who is part of group <abc> has permission to the acl attached with first state of life cycle, the life cycle itself and its all associated objected. Permissions are: RELATE as basic permission and EXECUTE_PROCEDURE as extended permission.
This problem is happening in Production, only for that user, not others who are also part of the same group.
Could anyone help?
Here I have put the piece of code which runs in the environment.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
dm_basic procedure
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Public Function Action(ByVal SessionID as String _
, ByVal ObjectId as String _
, ByVal UserName as String _
, ByVal TargetState as String _
, ByRef ErrorStack as String) As Boolean
Dim ret as boolean
Dim query_id as string
Dim textquery as string
Dim reportContent as string
Dim reportId as string
Dim EOL as string
Dim CurrentStateLabel as String
CurrentStateLabel = "Elaboration"
State2Label = "A_Valider"
State3Label = "Applicable"
State4Label = "Obsolete"
'For errors management
reportContent = ""
'returns the character of EOF for the current platform
EOL = Basic.Eoln$
'utilitaire pour tracer
If (Basic.OperatingSystem$ like "Windows*") Then
Ret = dmAPIExec("trace,c,10, C:\TEMP\updateTraceDocumentum1.log" )
gsTraceFileName = "C:\TEMP\Action1.log"
Else
Ret = dmAPIExec("trace,c,10,/tmp/PostProcTraceDctm23.log" )
gsTraceFileName = "/tmp/PostProc23.log"
End If
giTraceFileID = FreeFile
Open gsTraceFileName For output Access write As #giTraceFileID
Print #giTraceFileID, "DEBUT ETAPE ELABORATION"
'---------------------------------------------------------------------------------------
'need to delete all existing renditions
'removing existing Pdf & html rendition (case : updating document)
'---------------------------------------------------------------------------------------
Dim objectformat as String
objectformat = dmAPIGet("get," & SessionId & "," & ObjectId & ",a_content_type")
query_id = dmAPIGet("id," & SessionId & ",dmr_content where any parent_id='" & ObjectId & "' and full_format='pdf'")
If query_id <> "" And objectformat<> "pdf" Then
If Not CBool(dmAPIExec("removerendition," & SessionId & "," & ObjectId & ",pdf")) Then
reportContent = reportContent & "Error deleting pdf rendition : " & dmAPIGet("getmessage," & SessionID) & EOL ' to purge message list
End If
End If
query_id = dmAPIGet("id," & SessionId & ",dmr_content where any parent_id='" & ObjectId & "' and full_format='html'")
If query_id <> "" And objectformat<> "pdf" Then
If Not CBool(dmAPIExec("removerendition," & SessionId & "," & ObjectId & ",html")) Then
reportContent = reportContent & "Error deleting html rendition : " & dmAPIGet("getmessage," & SessionID) & EOL ' to purge message list
End If
End If
'------------------------------------------------------------------------------------------
'---------------------------------------------------------------------------
' get install owner
'---------------------------------------------------------------------------
textquery = "select r_install_owner from dm_server_config"
query_id = dmAPIGet("readquery," & SessionID & "," & textquery)
If CBool(dmAPIExec("next," & SessionID & "," & query_id)>0) Then
owner = dmAPIGet("get," & SessionId & "," & query_id & ",r_install_owner")
End If
If Not CBool(dmAPIExec("close," & SessionID & "," & query_id)) Then
End If
'---------------------------------------------------------------------------
'end get install owner
'---------------------------------------------------------------------------
'Setting document OwnerShip & acl
'search job string
Dim JobLabelstr as String
JobLabelstr = ""
Dim ParentFolderId as String
ParentFolderId = ""
'--- Lecteurs autorisés must be populated when it is null
'Dim AuthorisedReaders as String
'AuthorisedReaders = dmAPIGet("get," & SessionID & "," & ObjectId & ",rn_doc_confid_user_groups[0]")
'
'If AuthorisedReaders = "" Or IsNull(AuthorisedReaders)Then
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",rn_doc_confid_user_groups[0]","")) Then
End If
'End If
'--- Durée d'applicabilité must be populated when it is null
Dim Duration as String
Duration = dmAPIGet("get," & SessionID & "," & ObjectId & ",rn_control_doc_eff_duration")
If Duration = 0 Or IsNull(Duration)Then
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_control_doc_eff_duration","12")) Then
End If
End If
'--- Language_code must be populated when it is null
Dim language as String
language = dmAPIGet("get," & SessionID & "," & ObjectId & ",language_code")
'
'Print #2, "Alimenter language" & language
If language = "" Or IsNull(language)Then
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",language_code","fr_FR")) Then
End If
End If
'setting chrono fields & title,domain,collection
Dim chronoValue as Integer
Dim chronoFormatedstr as String
Dim i as Integer
chronoValue = dmAPIGet("get," & SessionId & "," & ObjectId & ",rn_doc_chrono")
'reportContent = reportContent & chronoValue & "<--chrono" & EOL
i= 6 - Len("" & chronoValue)
chronoFormatedstr = "" & chronoValue
Do While i>0
chronoFormatedstr = "0" & chronoFormatedstr
i = i -1
Loop
'reportContent = reportContent & chronoFormatedstr & "<--chronoformated" & EOL
'------ setting the rn_doc_internal_ref
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_doc_internal_ref","SMPA-DPA__-" & Year(DateValue(Date())) & "-" & chronoFormatedstr)) Then
End If
If Not CBool(dmAPIExec("save," & SessionId & "," & ObjectId)) Then
reportContent = reportContent & "Error saving" & dmAPIGet("getmessage," & SessionID) & EOL
End If
'------ setting the title
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",title",dmAPIGet("get," & SessionId & "," & ObjectId & ",object_name"))) Then
End If
'------ setting the rn_doc_collection
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_doc_collection","smpa")) Then
End If
'------ setting the rn_doc_domain
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_doc_domain","DPA__")) Then
End If
'------------------------------------------------------------------------------
' setting rn_doc_creation_date & rn_doc_creator_name
'------------------------------------------------------------------------------
'------ looking for imported document ( rn_doc_old_internal_ref??? )
Dim isIgDocument as String
isIgDocument = dmAPIGet("get," & SessionId & "," & ObjectId & ",rn_doc_old_internal_ref")
'------ If so, i set to rn_doc_creation_date the r_creation_date value
'------ and set to rn_doc_creator_name the r_creator_name value
If isIgDocument = "" Or IsNull(isIgDocument)Then
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_doc_creation_date",dmAPIGet("get," & SessionId & "," & ObjectId & ",r_creation_date"))) Then
End If
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_doc_creator_name",dmAPIGet("get," & SessionId & "," & ObjectId & ",r_creator_name"))) Then
End If
End If
'------------------------------------------------------------------------------
' end setting rn_doc_creation_date & rn_doc_creator_name
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' setting 'a_full_text' attribute to 'T'
'------------------------------------------------------------------------------
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",a_full_text","T")) Then
End If
'------------------------------------------------------------------------------
' setting 'r_version_label'
'------------------------------------------------------------------------------
Dim Demote_action as boolean
Demote_action = False
Dim nbVersion as integer
nbVersion =0
nbVersion = dmAPIGet("values," & SessionId & "," & ObjectId & ",r_version_label")
Dim indexVersionstr as String
indexVersionstr = ""
Dim newStateLabelindex as Integer
newStateLabelindex = -1
Dim indexVersion as Integer
indexVersion = 0
Do While (indexVersion < nbVersion)
indexVersionstr = dmAPIGet("get," & SessionId & "," & ObjectId &",r_version_label[" & indexVersion & "]")
If indexVersionstr = CurrentStateLabel Or indexVersionstr = State2Label Or indexVersionstr = State3Label Or indexVersionstr = State4Label Then newStateLabelindex = indexVersion
'YBA check case demote
If Demote_action = False Then
'Rechercher si version mineure ou majeure
If IsNumeric(left(indexVersionstr,1)) = True Then
If right(indexVersionstr,1) <> "0" Then
Demote_action = True
'Print #giTraceFileID, "case demote"
End If
End If
End if
indexVersion = indexVersion + 1
Loop
If newStateLabelindex = -1 Then newStateLabelindex = nbVersion
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",r_version_label[" & newStateLabelindex & "]",CurrentStateLabel)) Then
End If
'------------------------------------------------------------------------------
' end setting 'r_version_label'
'------------------------------------------------------------------------------
' Lecteur renault par defaut
If Demote_action = False Then
Print #giTraceFileID, "if Demote_Action = False"
Print #giTraceFileID, "Lecteur renault par defaut"
'Print #giTraceFileID, "pas demote = init lect rlt"
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",rn_smpa_doc_r_rlt","True")) Then
End If
End if
'------------------------------------------------------------------------------
' debut modif phase 2
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' initialiser le centre de cout et le metier du createur du document
' Alimenter les valeurs : rn_smpa_doc_cdc_writer
' rn_smpa_doc_main_job
' rn_smpa_doc_jobs[0]
' rn_control_doc_reviewers[0]
'------------------------------------------------------------------------------
Print #giTraceFileID, "debut modif phase 2"
Print #giTraceFileID, "initialiser le centre de cout et le metier du createur du document"
Dim CreatorName as String
Dim CCName as String
Dim FolderMetierId as String
Dim UserMetierName as String
Dim UserMetierLabel as String
Dim UserCostCenter as String
CCName = ""
FolderMetierId = ""
FolderMetierName = ""
CreatorName = dmAPIGet("get," & SessionId & "," & ObjectId & ",r_creator_name")
'---------------------------------------------------------------------------
' get User costcenter
'---------------------------------------------------------------------------
UserCostCenter = ""
Print #giTraceFileID, "Si il y a cost center la valeur c'est:"
textquery = "select rencostcenter from rn_user where user_name = '" & Rtrim(CreatorName) & "'"
query_id = dmAPIGet("readquery," & SessionID & "," & textquery)
If CBool(dmAPIExec("next," & SessionID & "," & query_id)>0) Then
UserCostCenter = dmAPIGet("get," & SessionID & "," & query_id & ",rencostcenter")
Print #giTraceFileID, UserCostCenter
End If
If Not CBool(dmAPIExec("close," & SessionID & "," & query_id)) Then
End If
if (UserCostCenter <> "") Then
textquery = "select distinct r_object_id, object_name,i_folder_id from rn_ref_value_folder_s where title = '" & Ucase(UserCostCenter) & "'"
query_id = dmAPIGet("readquery," & SessionID & "," & textquery)
If CBool(dmAPIExec("next," & SessionID & "," & query_id)>0) Then
FolderMetierId = dmAPIGet("get," & SessionID & "," & query_id & ",i_folder_id[0]")
CCName = dmAPIGet("get," & SessionID & "," & query_id & ",object_name")
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",rn_smpa_doc_cdc_writer",CCName)) Then
End If
Else
' Cost center utilisateur inconnu dans le referentiel => creation document impossible
reportContent = reportContent & "Error user cost center " & dmAPIGet("getmessage," & SessionID) & EOL
'Print #giTraceFileID, "Cost center utilisateur inconnu dans le referentiel "
End If
If Not CBool(dmAPIExec("close," & SessionID & "," & query_id)) Then
End If
if (FolderMetierId <> "") then
textquery = "select object_name, rn_folder_label_fr_fr from rn_ref_value_folder_s where r_object_id = '" & FolderMetierId & "'"
query_id = dmAPIGet("readquery," & SessionID & "," & textquery)
If CBool(dmAPIExec("next," & SessionID & "," & query_id)>0) Then
UserMetierName = dmAPIGet("get," & SessionID & "," & query_id & ",object_name")
UserMetierLabel = dmAPIGet("get," & SessionID & "," & query_id & ",rn_folder_label_fr_fr")
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",rn_smpa_doc_main_job",LCase(UserMetierName))) Then
End If
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",rn_smpa_doc_jobs[0]",UserMetierLabel)) Then
End If
End If
If Not CBool(dmAPIExec("close," & SessionID & "," & query_id)) Then
End If
'------------------------------------------------------------------------------
' initialiser le groupe metier du valideur
'------------------------------------------------------------------------------
textquery = "select group_name from dm_group where group_name like 'smpa_g_" & Lcase(UserMetierName) & "_reviewers'"
query_id = dmAPIGet("readquery," & SessionID & "," & textquery)
If CBool(dmAPIExec("next," & SessionID & "," & query_id)>0) Then
If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_control_doc_reviewers[0]",dmAPIGet("get," & SessionId & "," & query_id & ",group_name"))) Then
End If
else
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",rn_control_doc_reviewers[0]","smpa_g_super_reviewers")) Then
End If
End If
If Not CBool(dmAPIExec("close," & SessionID & "," & query_id)) Then
End If
'------ setting the owner_name
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",owner_name",CreatorName)) Then
End If
' ----------------------------------------------------------------
' YBA 11092006 (evolution reportée ultèrieurement)
' Setting original writer as owner when the doc has been demoted
' ----------------------------------------------------------------
'Dim original_writer as String
'original_writer = dmAPIGet("get," & SessionID & "," & ObjectId & ",rn_control_doc_writers[0]")
'Print #giTraceFileID, "original writer" & original_writer
'
'If (original_writer<> "") Then
' Print #giTraceFileID, "populate owner_name with :" & original_writer
'
' If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",owner_name",original_writer)) Then
' End If
'End If
' ----------------------------------------------------------------
' FIN YBA 11092006
' ----------------------------------------------------------------
'------ setting the acl_domain
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",acl_domain",Owner)) Then
End If
If Not CBool(dmAPISet("set," & SessionID & "," & ObjectId & ",acl_name","rn_smpa_" & LCase(UserMetierName) & "_write_acl")) Then
End If
'--- Function Domain must be populated only when it is null
'Dim fonctionDomain as String
'fonctionDomain = dmAPIGet("get," & SessionId & "," & ObjectId & ",rn_smpa_doc_func_domain[0]")
'
'If fonctionDomain = "" Or IsNull(fonctionDomain)Then
' If Not CBool(dmAPISet("set," & SessionId & "," & ObjectId & ",rn_smpa_doc_func_domain[0]",UserMetierLabel)) Then
' End If
'End If
End If
Else
' Cost center utilisateur vide => creation document impossible
reportContent = reportContent & "Error user cost center " & dmAPIGet("getmessage," & SessionID) & EOL
'Print #giTraceFileID, "cost center utilisateur non renseigné "
End If
'------------------------------------------------------------------------------
' saving changes PROMOTE
'------------------------------------------------------------------------------
'If Not CBool(dmAPIExec("save," & SessionID & "," & ObjectId)) Then
' reportContent = reportContent & "Error saving " & dmAPIGet("getmessage," & SessionID) & EOL
'End If
'------------------------------------------------------------------------------
' end saving changes
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' Case DEMOTE:
'------------------------------------------------------------------------------
'------ remove "renault" (if exists) from r_version_label
Dim nbVersiond as integer
nbVersiond =0
nbVersiond = dmAPIGet("values," & SessionId & "," & ObjectId & ",r_version_label")
Dim indexVersionstrd as String
indexVersionstrd = ""
Dim newStateLabelindexd as Integer
newStateLabelindexd = -1
Dim indexVersiond as Integer
indexVersiond = 0
Do While (indexVersiond < nbVersiond)
indexVersionstrd = dmAPIGet("get," & SessionId & "," & ObjectId &",r_version_label[" & indexVersiond & "]")
If indexVersionstrd = "renault" Then
If Not CBool(dmAPIExec("remove," & SessionId & "," & ObjectId & ",r_version_label[" & indexVersiond & "]")) Then
End If
'If Not CBool(dmAPIExec("save," & SessionId & "," & ObjectId)) Then
' reportContent = reportContent & "Error saving " & dmAPIGet("getmessage," & SessionID) & EOL
'End If
nbVersiond=nbVersiond-1
End if
indexVersiond = indexVersiond + 1
Loop
'------ remettre a blanc valideurs et date de validation
'If Not CBool(dmAPIExec("remove," & SessionId & "," & ObjectId & ",rn_control_doc_reviewers[0]")) Then
<p style="padding-left: