Workflow | Ordnerfeld von Dokument in Workflowakte auslesen

Hallo liebe Community,

ich suche nach einer Lösung, um innerhalb des Serverevents eines Workflows das E-Mail-Feld des Ordners auszulesen, der das Dokument beinhaltet, auf das der Workflow gestartet wurde.

Ich habe probiert das Ganze mit einer SQL Query abzufragen, aber in der Datenbank scheint es keine Verknüpfung von Dokument und Ordner via einer Art “Parent_ID” zu geben.

Dim docs, doc, sDocId

' Dokument aus der Workflowakte holen
Set docs = thisprocess.WFFile.FileObjects
' IComFileDocs

If Not docs Is Nothing Then
	If docs.Count > 0 Then
		Set doc = docs.Item(0)	' IComFileDoc
		sDocId = doc.Id			' Dokumenten-ID als BSTR
	End if
End if

debug2File "sDocId: " & sDocId

' Works bis hierhin

 
' Dieser Teil gibt kein Ergebnis zurück..
Set oJob = initJob("ado.ExecuteSQL")
	oJob.InputParameters.AddNewIntegerParameter "Flags", FLAGS_NOTHING
	oJob.InputParameters.AddNewStringParameter "Command", _
		"SELECT doc_parent " &_
		"FROM osdocver " &_
		"WHERE doc_id = '" & sDocId & "'"
	runJob()


DOC_PARENT scheint sich in diesem Falle auch nur auf die Variante zu beziehen.

Hat jemand von euch damit bereits Erfahrungen gesammelt und evtl. einen Lösungsvorschlag?

1 Like

Moin, aufgrund u.a. von Verweisen im enaio kann ein Dokument in mehreren Ordnern enthalten sein. Die Tabelle sdrel zeigt daher den Standort ( oder auch die Standorte) der Dokumente:

SELECT [loeschen]
,[zeitstempel]
,[stamm_id]
,[object_id]
,[objekttyp]
,[register]
,[regtype]
,[deleted]
FROM [enaio].[enaio].[sdrel]

Gruß aus Langenhagen

PS: doc_parent bezieht sich auf die Variantenverwaltung im enaio

2 Likes

Hallo @VK,

wie es @AlexanderKohrt bereits geschrieben hat, ist der Standort eines Dokuments in der SDREL (Stamm - (Register) - Dokument Relationstabelle) gespeichert. Dabei sind aber zwei Punkte zu beachten:

  • Nur die ID aktive Variante des Dokuments ist in der SDREL hinterlegt
  • Ein Dokument kann mehrere Standorte haben, daher kann die ID mehrfach vorkommen

Nicht aktive Varianten sind über die osdocver Tabelle mit der aktiven Variante verbunden.

Grundsätzlich ist es sinnvoll, die API zu verwenden, statt SQL zu verwenden, sofern das möglich ist. Voraussetzung hier ist, dass das Dokument einen Standort in enaio hat und das Dokument die aktive Variante ist.

In dem Fall würde ich empfehlen, die Methode dms.GetResultList (Seite 70) zu verwenden.
Dabei handelt es sich quasi um die Server-API Variante der kombinierten Anfrage im Client inklusive Expertenmodus.

Hiermit kann man relativ einfach eine solche Anfrage zusammenbauen:

<?xml version="1.0" encoding="UTF-8"?>
<DMSQuery>
  <Archive>
    <ObjectType internal_name="MeinSchrank">
      <Fields field_schema="ALL" />
      <Conditions>
        <ConditionObject internal_name="MeinDokument">
          <FieldCondition internal_name="object_id" system="1" operator="=">
            <Value>1234567</Value>
          </FieldCondition>
        </ConditionObject>
      </Conditions>
    </ObjectType>
  </Archive>
</DMSQuery>

In diesem Fall ist MeinSchrank der interne Name des Ordnertyps, MeinDokument der interne Name des Dokumenttyps und die 1234567 die ID des Dokuments.
Als Ergebnis kommen dann alle Metadaten des Ordners da ich in diesem Beispiel Fields field_schema="ALL" angegeben habe. Das system=1 ist nötig, da es sich hierbei um ein Systemfeld handelt.

Liebe Grüsse
Uli

2 Likes

Moin, danke für die zügigen Hilfestellungen!
Am Ende konnte ich über diesen Code das Ziel erreichen:

Set oJob = initJob("dms.GetResultList")
	sXmlIn = _
	"<DMSQuery request_type='HOL'>" &_
		"<Archive name='Schrankname'>" &_
			"<ObjectType internal_name='InternerOrdnerName' type='FOLDER'>" &_
				"<Fields field_schema='DEF'>" &_
				"<Field internal_name='InternerVariablenNameOrdner'/>" &_
				"</Fields>" &_
				"<Conditions>" &_
					"<ConditionObject internal_name='InternerDokumentenname' type='DOCUMENT'>" &_
			          "<FieldCondition internal_name='object_id' system='1' operator='='>" &_
			            "<Value>"&ZuvorErmittelteDokumentenID&"</Value>" &_
			          "</FieldCondition>" &_
			       "</ConditionObject>" &_
				"</Conditions>" &_
			"</ObjectType>" &_
		"</Archive>" &_
	"</DMSQuery>"

So bekam ich dann nur die entsprechende Variable: „InternerVariablenNameOrdner“ aus dem Ordner.

2 Likes