Server-Api dms.xmlInsert mit Addon

Hallo , wir importieren pdf via Server-API
$oJob = $session.NewJob( „dms.XMLInsert“ );
leider werden dabei Addon hinterlegte Felder nicht gefüllt,
via Enaio-Client aber schon.
Kann man das API irgendwie forcieren ?
(Enaio 9.10)
Danke und Grüsse Joachim

Hallo zusammen,
konnte es selber lösen:
$oJob = $session.NewJob( „krn.GetCounter“ );
in dem Fall war als Objekt folgende ID definiert, die man via API auslesen kann wenn man die os_guid mitgibt):
$oJob.InputParameters.AddNewStringParameter(„CounterGUID“, „xxxx“);
OjectDef:
-<![CDATA[[EDV|Dokument|Schriftstück-ID]
ADDON32=axaddcnt.dll
EXTRA00=COUNTERWIDTH=5
EXTRA01=COUNTERTYPE=3
EXTRA02=YEARFORMAT=4
EXTRA03=INITIALVALUE=1
EXTRA04=FORMAT=/

Gruss Joachim

1 Like

Hoi @jowin, ich bin völlig verwirrt, in welcher Sprache ist denn Dein Code notiert?

Hallo @jowin,

sobald man ausserhalb des enaio Windows Client ist empfiehlt es sich meistens solche Dinge wie Counter Felder (Barcodes, DokumentIDs) nach meiner Erfahrung direkt im Server Event umzusetzen.

Hierzu kannst du den Server Event KernelAfterJob::std.IndexDataChanged verwenden.

CONST COUNTER_ENDLESS=0
CONST COUNTER_DAILY=1
CONST COUNTER_MONTHLY=2
CONST COUNTER_YEARLY=3

Function Main()
	Dim ObjectId: ObjectId = clng(RC.InputParams.Value("dwObjectID"))
	Dim ObjectTypeId: ObjectTypeId = clng(RC.InputParams.Value("dwObjectType"))
	Dim ActionID: ActionID = clng(RC.InputParams.Value("Action"))
	
	If ObjectTypeId = 14 And ActionId = 2 Then
		SetCounter ObjectId, ObjectTypeId, ActionID
	End If

End Function

Function SetCounter(ObjectId, ObjectTypeId, ActionID)
	Dim Counter: Counter  = Counter("UNIQUE_COUNTER_ID", COUNTER_ENDLESS)		
	' Update des Objekts per dms.XMLUpdate fehlt hier noch
End Function

Public Function Counter(ByVal Guid, ByVal CounterType)
	Dim JobInputParameter: Set JobInputParameter = RC.NewJobsParams
	Dim JobOutputParameter: Set JobOutputParameter = RC.NewJobsParams
	With JobInputParameter
		.Value("CounterGUID") = Guid
		.Value("Flags") = 0
		.Value("Initial") = 1
		.Value("Reset") = False
		.Value("CounterType") = CounterType
	End With
	RC.Jobs.krn.GetCounter jobInputParameter, jobOutputParameter
	Counter = jobOutputParameter.Value("Counter")
End Function

Bei ObjectTypeId = 14 handelt es sich um die Objekt Typ ID.
ActionId = 2 ist sehr wichtig, da so nur Neuanlagen geprüft werden. Ansonsten kann es schnell zu Rekursionen kommen. Im Beispiel Fehler noch der Update Befehl.

Falls bei Ihnen die konstanzer Helper Klasse RCHelper bereits im System vorhanden sind dann kann man das Ganze auch etwas schlanker schreiben. Das können Sie prüfen in dem Sie in Event GlobalServerScript nach class RCHelperClass suchen,

Beispiel (auf Basis des RCHelper ) ist bereits inklusive Update des ID/Barcode Felds wobei die ID mit dem prefix Prefix und einem Barcode mit acht Stellen (mit führen Nullen) generiert wird.

Function Main()
	Dim ObjectId: ObjectId = clng(RC.InputParams.Value("dwObjectID"))
	Dim ObjectTypeId: ObjectTypeId = clng(RC.InputParams.Value("dwObjectType"))
	Dim ActionID: ActionID = clng(RC.InputParams.Value("Action"))
	
	If ObjectTypeId = 14 And ActionId = ACTION_DOCUMENT_CREATED Then
		Dim Counter: Counter  = RCHelper.Counter("UNIQUE_KEY_FOR_COUNTER", COUNTER_ENDLESS)
		Dim MyObject: Set MyObject = RCHelper.GetObjectDetailsAsObject(ObjectId, ObjectTypeId)
		MyObject.SetField "ID", "Prefix-" & Right("00000000" & Counter, 8)
		MyObject.Update	
	End If	
End Function

Hallo @rk, ist powershell .

1 Like

Hallo @uw,
Danke für die ausführliche Hilfe, werde mir das anschauen.
Viele Grüsse

Anbei die komplette Powershell routine / Grüsse jowin :

function addPdftest($session, $file){

$oJob = $session.NewJob( „krn.GetCounter“ );

$oJob.InputParameters.AddNewIntegerParameter(„Flags“, 0);
$oJob.InputParameters.AddNewBooleanParameter(„Reset“, 0);
$oJob.InputParameters.AddNewIntegerParameter(„Initial“, 0);
$oJob.InputParameters.AddNewIntegerParameter(„CounterType“, 3);
$oJob.InputParameters.AddNewStringParameter(„CounterGUID“, „4E25AD8A41634461845C4E23523E5713“);
$oJob.Execute();

$a = $oJob.OutputParameters(1).Value;

$str = $a.ToString(‚0000‘)

$date = get-date -Format yyyy

$str = $str + „/$date“;

$xml= [xml]@"

<?xml version='1.0' encoding='UTF-8'?> Altakte Eintritt via powershell Bemerkung $file Antrag $str "@;

$xml.InnerXml > c:\temp\server-apirequest.xml

$oJob = $session.NewJob( „dms.XMLInsert“ );
$oJob.InputParameters.AddNewIntegerParameter(„Flags“, 0);
$oJob.InputParameters.AddNewXMLParameter(„XML“,$xml.InnerXml);
$oJob.InputParameters.AddNewStringParameter(„File_0“,$file);
$oJob.Execute();
$oJob.OutputParameters(1).XML > c:\temp\server-apiresponse.xml ;

}