2.5.2. Ändern eines Elements

In diesem Beispiel wird ein Element vom Server abgerufen, geändert, und wieder auf dem Server gespeichert. Konkret soll das Element mit einer Anmerkung erledigt werden.
Zunächst wird das Element über die Methode "Get()" des Item-Dienstes (GhRpcItemslibRpcItems) der Unit rpc_itemslib vom Server abgerufen. Dazu wird die ID des Elements übergeben (in diesem Beispiel wird die ID 1107 verwendet). Der zweite Parameter der Methode "Get()" gibt an, ob das Element als "lesend" angezeigt werden soll. Für dieses Beispiel ist das nicht gewünscht.
Anschließend werden die Anmerkungen und das Systemprotokoll des Elements geleert. Dazu werden die beiden Objekteigenschaften "Remarks" und "Protocol" auf leere Arrays gesetzt. Andernfalls werden die bereits am Objekt vorhandenen Anmerkungen und Protokolleinträge beim Speichern erneut hinzugefügt.
Als nächstes wird dem Element als Bearbeiter der Benutzer der RPC Schnittstelle zugewiesen (in diesem Beispiel ist das der Benutzername "tester"). Hierzu werden über den Dienst GhRpcUserslibRpcUsers der Unit rpc_userslib die Informationen über den aktuell angemeldeten Benutzer abgerufen. Das geschieht über die Methode "GetUserInfo". Die Objekteigenschaft "ID" des Ergebnisses ist die ID des aktuellen Benutzers. Diese wird der Eigenschaft "UserRef" des Elements zugewiesen, um so den Bearbeiter festzulegen.
Der Status des Elements wird auf "erledigt" gesetzt, indem der Objekteigenschaft "State" die Konstante "rpc_itemslib::isDone" zugewiesen wird (der Prefix "is..." steht hier für "item state").
Zusätzlich wird eine Anmerkung hinzugefügt. Dazu wird ein Objekt vom Typ GhRpcItemslibRpcProtocolItem über die Hilfsfunktion "rpc_itemslib::newRpcProtocolItem()" erzeugt und deren Objekteigenschaft "Text" der Anmerkungstext zugewiesen. Dieses Objekt wird dem Array der Objekteigenschaft "Remarks" des Elements hinzugefügt.
Schließlich wird das so veränderte Element über die Methode "Put()" des Item-Dienstes wieder auf dem Server gespeichert. Das Speichern von Elementen ist nur erlaubt, wenn das Element zuvor gesperrt wurde. Dazu wird vor dem "Put()" noch die Funktion "Lock()" mit der ID des Elements aufgerufen. Nach dem "Put()" wird das Element über die Funktion "Unlock()" wieder freigegeben. Hier wird ebenfalls wieder die Element-ID als Parameter übergeben.

index.php - Ändern eines Elements:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
require_once 'ghrpc/ghrpc.php';
$client = new GhRpcClient('localhost', 80, false, 'tester', 'test123'); // Client-Objekt
$client->setUniqueClientIdCookieName('ghrpcexample6'); // eindeutige Client-ID
$itemService = rpc_itemslib::newRpcItems($client); // Dienst für Elemente
$itemId = 1107; // ID des zu bearbeitenden Elements
try
{
$item = $itemService->Get($itemId, false); // Element abrufen
}
catch(Exception $exception)
{
die('Die Notiz konnte nicht abgerufen werden (Fehler: ' . $exception->getMessage() . ').');
}
$item->Remarks = array(); // Anmerkungen leeren, da sie sonst erneut hinzugefügt werden
$item->Protocol = array(); // Systemprotokoll leeren, da die Einträge sonst erneut hinzugefügt werden
$item->UserRef = rpc_userslib::newRpcUsers($client)->GetUserInfo()->ID; // Angemeldeten Benutzer als Bearbeiter zuweisen
$item->State = rpc_itemslib::isDone; // Status in "erledigt" ändern
$remark = rpc_itemslib::newRpcProtocolItem();
$remark->Text = 'Ich habe das über die RPC Schnittstelle erledigt.';
$item->Remarks[] = $remark;
try
{
$itemService->Lock($item->ID);
$itemService->Put($item);
$itemService->Unlock($item->ID);
echo 'Das Element wurde gespeichert.';
}
catch(Exception $exception)
{
die('Das Element konnte nicht gespeichert werden (Fehler: ' . $exception->getMessage() . ').');
}