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.

1_crm ax-anfragen-übersicht

 

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

 

2_crm ax-neue-klasse

 

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

 

3_crm ax-neues feld

 

 

c. Anpassung der Form TSTimesheetEntry

 

4_crm ax-anpassung form

 

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.

 

5_crm ax-anpassung im crm

 

 

 

Mit diesen Änderungen sollte jetzt einer effizienten Zeiterfassung nichts mehr im Wege stehen.

Viel Erfolg!