CRM-Anfragen in AX 2012 Zeiterfassung
Da wir intern einerseits für die Verwaltung unserer Anfragen Microsoft Dynamics CRM online und andererseits für die Zeiterfassung Microsoft Dynamics AX 2012 nutzen, haben wir einen Weg gesucht, um beide Systeme miteinander zu verbinden. Ziel war es, dass im AX 2012 Arbeitszeitnachweis ein neues Lookup eingefügt wird, das eine Auswahl der Anfragen aus dem CRM ermöglicht.
Folgende Schritte sind dafür auszuführen:
1. Neue View in der Microsoft Dynamics CRM Datenbank:
a. In der Datenbank wird eine View erzeugt, welche alle offenen und auch in den letzten 2 Tagen abgeschlossenen Anfragen anzeigt
b. Diese View wird später in Dyanmics AX genutzt
c. CODE:
SELECT TOP (100) PERCENT dbo.IncidentBase.IncidentId, RIGHT(LEFT(dbo.IncidentBase.TicketNumber, 9), 5) AS TicketNumber,
dbo.AccountBase.new_ESYONKdNr AS AXAccountNum, dbo.IncidentBase.Title, dbo.AccountBase.Name
FROM dbo.IncidentBase INNER JOIN
dbo.AccountBase ON dbo.IncidentBase.CustomerId = dbo.AccountBase.AccountId
WHERE (dbo.IncidentBase.StatusCode <> 5) OR
(dbo.IncidentBase.ModifiedOn > GETDATE() – 2)
ORDER BY TicketNumber DESC
2. Anpassungen in Microsoft Dynamics AX 2012
a. Erstellen einer neuen temporären Tabelle, um die Anfragen zwischen zu speichern
Neue Klasse CRMIncidentNumber mit statischer Methode, um die temporäre Tabelle zu füllen:
CODE:
static resultSet fillTmpTable(CustAccount _custAccount)
{
Connection connection;
ResultSet resultSet;
Statement statement;
str query;
;
query = strFmt (“select * from openrowset(‘SQLNCLI’,’Trusted_Connection=yes;Server=SRV01;database=ESYONGmbH_MSCRM’,’ select * from ESYOpenIncident’) as t where AXAccountNum = ‘%1′”, _custAccount);
connection = new Connection();
statement = connection.createStatement();
new SqlStatementExecutePermission(query).assert();
resultSet = statement.executeQuery(query);
return resultSet;
}
b. Neues Feld in der Tabelle TSTimesheetLine
CRMTicketNumber
c. Anpassung der Form TSTimesheetEntry
CODE lookup-Methode:
public void lookup()
{
TmpCRMIncidents tmpCRMIncidents;
CustAccount tmpCustAccount;
ResultSet resultSet;
SysTableLookup sysTableLookup;
;
changeCompany(TSTimesheetLine.ProjectDataAreaId)
{
tmpCustAccount = ProjTable::find(TSTimesheetLine.ProjId).CustAccount;
}
resultSet = CRMIncidentNumber::fillTmpTable(tmpCustAccount);
while(resultSet.next())
{
tmpCRMIncidents.CRMIncidentNumber = strFmt(“%1-%2”, resultSet.getString(2), resultSet.getString(4));
tmpCRMIncidents.insert();
}
sysTableLookup = SysTableLookup::newParameters(tableNum(tmpCRMIncidents),this,false );
select firstOnly tmpCRMIncidents;
sysTableLookup.addLookupField(fieldNum(TmpCRMIncidents, CRMIncidentNumber),True);
sysTableLookup.parmTmpBuffer(tmpCRMIncidents);
sysTableLookup.performFormLookup();
}
3. Anpassungen in Microsoft Dynamics AX CRM – Neues Feld AX-Kundennummer
Im CRM muss jetzt noch im Formular Firma ein neues Feld AX-Kundennr angelegt werden, um die Zuordnung der Aufträge zum Kunden zu ermöglichen. Wie dieses Feld angelegt werden kann, können Sie im Blog-Beitrag Microsoft Dynamics CRM – Neue Felder im Kontaktformular erstellen nachlesen. Dieses Feld muss natürlich analog zu der Kundennummer aus AX geführt werden.
Mit diesen Änderungen sollte jetzt einer effizienten Zeiterfassung nichts mehr im Wege stehen.
Viel Erfolg!