Site menu:

Einführung

Die LogMyTime Anbindung ist eine einfache Möglichkeit Aufträge als Projekt in LogMyTime anzulegen. Damit können Tätigkeiten bequem, z.B. per Handy vor Ort erfasst werden...

Kontakt und Support:


Mehrere Mitarbeiter sollen an einem einem Projekt arbeiten:

Standardmässig lässt sich nur ein Benutzer pro Projekt auswählen. So ändern Sie das:
Rufen Sie das Setup auf:

Rufen Sie den markierten Script auf:


Ändern Sie den Wert False in der markierten Zeile auf True

Cloud-Formular-Auswahl einschränken:

Sie können PDF-Formulare an alle eingetragenen Mitarbeiter des Projekts schicken. Wenn bestimmte Mitarbeiter niemals PDF-Formulare bekommen sollen, entfernen Sie in der LogMyTime Weboberfläche den Eintrag Email dieser Mitarbeiter. Damit erscheinen diese nicht mehr in der Auswahl.

Unterstützung des OfficeSI-Wartungsmoduls:

Im Wartungsmodul existiert die zusätzliche Datenausgabe, dort kann ein Text aus den den Daten des Wartungauftrages erzeugt werden. Das LogMyTime-Sendmodul erkennt, ob ein Wartungsauftrag vorliegt. Ebenso die Anzahl der Maschinen/Geräte, die im Wartungsauftrag angegen wurden. Wie bekommt man diese Daten in ein PDF-Formular? Im PDF-Formular-Designer steht Ihnen der gesamte Text als Platzhalter [Wartung] zur Vefügung. Zuätzlich existieren die Platzhalter [W1] bis [W35]. Wenn Sie im Ausgabetext des Wartungsmoduls Zeilen in der Form Wx=Text verbauen, werden diese als einzelne Daten extrahiert, und aus dem eigentlichen Text entfernt. Beispiel:
W1=[Typ]
W2=[Seriennummer]

Hinweis: x ist eine Zahl von 1..35.

So verbauen Sie einen Wx Wert im Namen des Projekts: Fügen Sie im Script "Senden" vor der Zeile BeginProjectAllInOne diese Zeile ein:
SendProject.WXName:='Wx'; Ersetzen Sie x durch Ihren Wunschwert.

Artikel des Projekts als Tätigkeiten verbauen:

Fügen Sie im Script "Senden" vor der Zeile
SendProject.ClientName
diese beiden Zeilen ein
SendProject.UseTask := True; {Artikel als tätigkeiten verbauen}
SendProject.TaskFilter := '';

Ab jetzt erscheint zusätzlich ein Dialog zur Auswahl der Positionen.
Es werden alle Zeilen berücksichtigt, die angelegte Artikel beinhalten.

Tätigkeiten in LogMyTime mit Artikeln in Office-SI verbinden:

Legen Sie in LogMyTime für den Bereich Tätigkeiten ein neues Feld an, beschriften Sie dieses mit Artikelnummer. Tragen Sie dort die entsprechenden Artikelnummern aus OfficeSI ein. Wenn Sie jetzt die Funktion Projektdaten abholen ausführen, und keine Zeitmatrix benutzen, werden beim Einfügen in OfficeSI die Preise nach Artikelnummer aktualisiert. Relevanter Scriptabschnitt:
s := TimeEntry(i, 'Custom1');
AddS(j_Parts, 'Number', s);
Custom1 ist die das erste zugefügte Feld in LogMyTime.

Übersicht der Variablen:

Das sind Variablen, die über die Funktion TimeEntry (liest Werte vom LogMyTime-Server) gelesen werden können:
Und zwar, wenn Sie Zeiteinträge zeilenweise selbst verbauen wollen.
Beispiel: TimeEntry(i, 'DurationString')
StartTime
EndTime
DurationString
DurationSeconds
UserID
ProjectID
TaskID
Billable
Locked
IsEditable
LastChangeDate
LastChangeAuthor
Comment
Custom1
Custom2
Custom3
Custom4
Custom5
Task.Custom1
Task.Custom2
Task.Custom3
Task.Custom4
Task.Custom5
Die Namen der OfficeSI-Felder finden Sie hier:
Technische Information

Speziell beim Senden können verwendet werden:
AdressSmart
AdressFull
ReferenzText
ReferenzDate
aus OfficeSI

Das Objekt SendProject:

//Anfang Artikel als Tätigkeiten
SendProject.UseTask True, wenn Artikel als Tätigkeiten verbaut werden sollen
SendProject.TaskFilter Artikel Filter auf Text und/oder Artikelnummer, Beispiel: Description1=a*b or oder and Number=a*b
//JSON Feldnamen der Artikel --> LogMyTime Custom1..5
SendProject.TaskSourceCustom1FieldName
SendProject.TaskSourceCustom2FieldName
SendProject.TaskSourceCustom3FieldName
SendProject.TaskSourceCustom4FieldName
SendProject.TaskSourceCustom5FieldName
//Ende Artikel als Tätigkeiten

//Clientdaten:
SendProject.ClientName
SendProject.ClientComment
SendProject.ClientCustom1
SendProject.ClientCustom2
SendProject.ClientCustom3
SendProject.ClientCustom4
SendProject.ClientCustom5
Quelle sollte hier aus JAdress_S(JSON-Feldname) genommen werden

//Projektdaten
SendProject.ProjectName
SendProject.ProjectComment
SendProject.ProjectCustom1
SendProject.ProjectCustom2
SendProject.MultiSelectPermissions
Quelle sollte hier aus JOrder_S(JSON-Feldname) genommen werden

Die JSON-FeldNamen finden Sie im Abschnitt "Übersicht der Variablen"

Scripte:

Das sind Beispiele, um die Möglichkeiten zu verdeutlichen.
Soweit möglich ändern wir gerne die Scripte nach Ihren Wünschen.

Senden, enthaltene Positionen werden als Tätigkeiten verbaut:
var i: Integer;
begin
{Verändern Sie nichts, wenn Sie nicht wissen, was Sie tun!}
ResetProperties; {Pflicht}
if not JSONInputOK then
begin {Programm wurde wahrscheinlich nicht über "Senden" aufgerufen}
Result := 'Keine JSON-Daten aus Office-SI!';
exit;
end;
//Damit werden die Quelldaten aus OfficeSI kopiert, gut, um Feldnamen zu sehen
//JSONSourceToClipbrd;
SendProject.UseTask := false; {Artikel als Tätigkeiten verbauen}
SendProject.TaskFilter := '';
//Der ClientName wird aus der Kundennnummer und dem Namen gebildet
SendProject.ClientName := Copy(JAdress_S('CustomerNumber') + ' ' + JAdress_S('AdressSmart'), 1, 50);
//Der Projektname wird aus der Auftragsnummer und aus der Adresse gebildet
SendProject.ProjectName := JAdress_S('AdressSmart');
//legt fest, ob mehrere Mitarbeiter ausgewählt werden k¨nnen
SendProject.MultiSelectPermissions := False;
{Spezialfall Wartungsmodul: Die "zusätzliche Datenausgabe" des Wartungsmoduls
steht Ihnen als Quelle zur Verfügung. Was macht dieses Beispiel?
Ist ein Gerät vorhanden, passiert nichts weiter
Sind mehr ein Geräte angegeben, wird das Projekt geklont, Der Name wird dabei um [x] ergänzt
Maintenance(i) ist in diesem Fall die zusätzliche Datenausgabe des Wartungsmoduls}
if MaintenanceCount > 0 then
for i := 0 to MaintenanceCount - 1 do
begin
//x projecte werden erzeugt, nummer wird [a/count]
AddProject(Maintenance(i));
end;
SendProject.WXName := 'W1';
if MaintenanceCount = 0 then
AddProject('Für Sie wurde ein neues Projekt erzeugt' +
#13#10 + 'Ihr Kunde ist: ' + JAdress_S('AdressSmart'));
BeginProjectAllInOne;
EndProjectAllInOne;
Result := RAClientResult;
end.

Empfangen, jede Tätigkeit wird eine Zeile in OfficeSI:
var i: Integer;
s: string;
ds: Integer;
ProjectID: Integer;
AnyError: string;
begin
ResetProperties;
ReceiveProject.UseClipBrd := False;
Result := 0;
ProjectID := 0;
CreateDlg;
while true do
begin
ProjectID := GetNextID;
try
AnyError := '';
if ProjectID <= 0 then
Exit;
ReceiveProject.ProjectID := ProjectID;
if GoTime then
begin
//Ausgabe, wenn eine Zeimatrix genutzt wird
end else
begin
for i := 0 to ReceiveProject.TimeEntryCount - 1 do
begin
NewPartItem;
s := TimeEntry(i, 'DurationString') + ' h für ' + TimeEntry(i, 'Description1');
AddS(j_Parts, 'Description1', s);
s := TimeEntry(i, 'Comment');
AddS(j_Parts, 'LongText', s);
s := TimeEntry(i, 'Task.Custom1');
AddS(j_Parts, 'Number', s);
AddS(j_Parts, 'Position', inttostr(i + 1));
try
ds := StrToInt(TimeEntry(i, 'DurationSeconds'));
AddS(j_Parts, 'Quantity', floattostr(ds / 3600));
except end;
end;
end;
AddB(j_Order, 'NettoPrices', True);
AddB(j_Order, 'TaxImport', False);
AddB(j_Order, 'UpdateParts', True);
AddB(j_Order, 'AppendMode', true);
if ReadIPCValueSync('CANPOSTJSON') = '1' then
Save(po_ipc)
else
begin
Save(po_null);
AnyError := 'OfficeSI muss einen Auftrag bearbeiten!';
end;
finally
GoSuccess(ProjectID, AnyError);
end;
end; //while true do
end.