Toon posts:

[MS Dynamics CRM 4] Relatiekoppelingen definieren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wij maken gebruik van Microsoft Dynamics CRM 4.0.7333.113 op een Windows Enterprise 2003 (r2) server. We gebruikten voorheen MS CRM 3.x, maar hebben enkele maanden geleden geupgrade naar de genoemde 4.x versie, waarbij helaas enkele kleine (maar toch lastige) problemen naar voren zijn gekomen.

Zo houden we in CRM cases/ aanvragen bij. Als we een aanvraag openen, selecteren we een contactpersoon, waarna het bovenliggende account automatisch ingevuld werd. Deze 'koppeling/ relatie' werkt nu niet meer dus ben ik in de entiteiten gaan neuzen, en hebt het een en ander bekeken. Ik heb (ook voor andere projecten) verschillende 1:N relaties en N:1 relaties aangemaakt, maar ik krijg het niet voor elkaar dat het veld 'account' automatisch ingevuld wordt op het moment dat er een contactpersoon geselecteerd wordt, terwijl dat dit volgens mij een simpele N:1 relatie verwijzing moet zijn.

Kan iemand met me meedenken of heeft iemand ervaring met zoiets? Ik heb op Google al zitten zoeken, heb de HELP- index van CRM al doorgenomen en getroubleshoot, maar ik kom er niet 1, 2, 3 uit.

Verwijderd

Topicstarter
nobody?

Verwijderd

Topicstarter
Is er echt geen CRM 'expert' die mij kan antwoorden welke relatiekoppeling ik aan moet leggen?

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Ik zou het eens proberen in de microsoft.public.crm nieuwsgroep (Engelstalig),daar kijken ook de Support Clerck's van Microsoft mee.

[ Voor 10% gewijzigd door Turdie op 27-08-2008 15:17 ]


Verwijderd

Topicstarter
guidovb999 schreef op woensdag 27 augustus 2008 @ 15:17:
Ik zou het eens proberen in de microsoft.public.crm nieuwsgroep (Engelstalig),daar kijken ook de Support Clerck's van Microsoft mee.
Bedankt voor je antwoord, ik heb gelijk een bericht gepost.

Veel van de CRM problemen heb ik al opgelost met Microsoft Support, maar dit kost me telkens €399,-, een beetje teveel van het goede als je na iets langer zoeken het op internet kan vinden ;)

  • bassio
  • Registratie: Oktober 2000
  • Laatst online: 22:59
Kan het niet te maken hebben met een javascript die op het Onchange event van het formulier staat? Voor zover ik weet is het geen standaard gedrag dat het account automatisch gevuld wordt. Om te kijken of er een javascript op het formulier staat ga je naar (in NL versie) Instellingen -> Aanpassing -> Entiteiten aanpassen -> Aanvraag. Kies vervolgens voor Formulieren en weergaven en dubbelklik op Formulier. Dubbelklik vervolgens op het contact veld en ga naar het laatste tabblad Gebeurtenissen en klik op bewerken.

Kijk of hier een javascript staat en post dat dan even hier. Waarschijnlijk wordt er een webservice aanroep gedaan en de webservice is flink veranderd in CRM 4.0.

Laat even weten of je eruit komt.

Verwijderd

Topicstarter
bassio schreef op maandag 01 september 2008 @ 23:53:
Kan het niet te maken hebben met een javascript die op het Onchange event van het formulier staat? Voor zover ik weet is het geen standaard gedrag dat het account automatisch gevuld wordt. Om te kijken of er een javascript op het formulier staat ga je naar (in NL versie) Instellingen -> Aanpassing -> Entiteiten aanpassen -> Aanvraag. Kies vervolgens voor Formulieren en weergaven en dubbelklik op Formulier. Dubbelklik vervolgens op het contact veld en ga naar het laatste tabblad Gebeurtenissen en klik op bewerken.

Kijk of hier een javascript staat en post dat dan even hier. Waarschijnlijk wordt er een webservice aanroep gedaan en de webservice is flink veranderd in CRM 4.0.

Laat even weten of je eruit komt.
Bedankt voor je antwoord. Ik heb even gekeken bij de eigenschappen van het veld 'account', er staat hier géén Javascript. Sterker nog, de gebeurtenis is uitgeschakeld. Het kan zijn dat het veld 'account' maatwerk is geweest, het veld kijkt namelijk naar de contactpersoon die ingevuld wordt en selecteert automatisch de bovenliggende account.

Als ik kijk bij de eigenschappen van het veld 'contactpersoon', dan zie ik het volgende staan:


var accountName = null;
var lookupItem = new Array;
lookupItem = crmForm.all.customerid.DataValue;

// If there is data in the field, get the accountname from the first selected contact.
if (lookupItem != null && lookupItem[0] != null)
{
// lookupItem[0].name = The text value of the lookup
// lookupItem[0].id = The GUID of the lookup
// lookupItem[0].typename = The entity type name

//If typename is contact, look into CRM for the accountname
if (lookupItem[0].typename == "contact")
{
var xml = "" +
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
" <soap:Body>" +
" <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\" xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">" +
" <q1:EntityName>account</q1:EntityName>" +
" <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
" <q1:Attributes>" +
" <q1:Attribute>name</q1:Attribute>" +
" </q1:Attributes>" +
" </q1:ColumnSet>" +
" <q1:Distinct>false</q1:Distinct>" +
" <q1:LinkEntities>" +
" <q1:LinkEntity>" +
" <q1:LinkFromAttributeName>accountid</q1:LinkFromAttributeName>" +
" <q1:LinkFromEntityName>account</q1:LinkFromEntityName>" +
" <q1:LinkToEntityName>contact</q1:LinkToEntityName>" +
" <q1:LinkToAttributeName>parentcustomerid</q1:LinkToAttributeName>" +
" <q1:JoinOperator>Inner</q1:JoinOperator>" +
" <q1:LinkCriteria>" +
" <q1:FilterOperator>And</q1:FilterOperator>" +
" <q1:Conditions>" +
" <q1:Condition>" +
" <q1:AttributeName>contactid</q1:AttributeName>" +
" <q1:Operator>Equal</q1:Operator>" +
" <q1:Values>" +
" <q1:Value xsi:type=\"xsd:string\">" + lookupItem[0].id + "</q1:Value>" +
" </q1:Values>" +
" </q1:Condition>" +
" </q1:Conditions>" +
" </q1:LinkCriteria>" +
" </q1:LinkEntity>" +
" </q1:LinkEntities>" +
" </query>" +
" </soap:Body>" +
"</soap:Envelope>";

var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

xmlHttpRequest.Open("POST", "/mscrmservices/2006/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2006/WebServices/RetrieveMultiple");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);

var resultXml = xmlHttpRequest.responseXML;
//alert(resultXml.xml);
//window.clipboardData.setData('Text',resultXml.xml);

var startIndex = resultXml.xml.indexOf("<name>");
//Check if node is found
if (startIndex > -1)
{
var stopIndex = resultXml.xml.indexOf("</name>");
accountName = resultXml.xml.substring(startIndex+6, stopIndex);
//Decode the xmlstring
accountName = accountName.replace('&','&').replace('"','"').replace('<','<').replace('>','>');
accountName = accountName.replace("'","'");
}
}
else
{
//If typename is not contact, use the name property of the lookup
accountName = lookupItem[0].name;
}
}

//Set ForceSubmit to True for disabled or read-only fields to submit them.
crmForm.all.new_account.ForceSubmit = true;

//Assign accountName to the CRMForm field
crmForm.all.new_account.DataValue = accountName;


In dit script zit dus de 'autoaanvulfunctie' van het veld 'account', maar hoe krijg ik deze werkend?

  • bassio
  • Registratie: Oktober 2000
  • Laatst online: 22:59
Het zit inderdaad in dit script. Echter, in dit script wordt nog verwezen naar de oude webservice van CRM 3.0. In CRM 4.0 vereist de nieuwe webservice een andere authenticatie. Ik ga even kijken of ik je javascript werkend kan krijgen.

edit:
Dit zou hem moeten zijn. Het is een compleet andere functie, maar met deze functie kan je elk veld ophalen vanaf een entiteit als je maar de GUID van een record hebt.
var accountName = null;
var lookupItem = new Array;
lookupItem = crmForm.all.customerid.DataValue;

// If there is data in the field, get the accountname from the first selected contact.
if (lookupItem != null && lookupItem[0] != null)
{
// lookupItem[0].name = The text value of the lookup
// lookupItem[0].id = The GUID of the lookup
// lookupItem[0].typename = The entity type name

//If typename is contact, look into CRM for the accountname
if (lookupItem[0].typename == "contact")
{
//Aanroep van de functie:
//De eerste parameter is de entiteit waar het veld staat waar je de waarde van wilt hebben
//De tweede parameter is de guid van de entiteit waar het veld staat
//De derde parameter is het veld waar je de waarde uit wil hebben

var accountid = GetAttributeValueFromID("contact", crmForm.all.customerid.DataValue[0].id, "parentcustomerid");
accountName = GetAttributeValueFromID("account", accountid, "name");


//Deze functie zorgt ervoor dat de waarde uit een veld van een andere entiteit opgehaald wordt.
function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName)
{
var xml = "" +
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + GenerateAuthenticationHeader() +
" <soap:Body>" +
" <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
" <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
" <q1:EntityName>" + sEntityName +"</q1:EntityName>" +
" <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
" <q1:Attributes>" +
" <q1:Attribute>" + sAttributeName + "</q1:Attribute>" +
" </q1:Attributes>" +
" </q1:ColumnSet>" +
" <q1:Criteria>" +
" <q1:FilterOperator>And</q1:FilterOperator>" +
" <q1:Conditions>" +
" <q1:Condition>" +
" <q1:AttributeName>"+ sEntityName + "id</q1:AttributeName>" +
" <q1:Operator>Equal</q1:Operator>" +
" <q1:Values>"+
"<q1:Value xsi:type=\"xsd:string\">" + sGUID + "</q1:Value>" +
"</q1:Values>" +
" </q1:Condition>" +
" </q1:Conditions>" +
" </q1:Criteria>" +
" </query>" +
" </RetrieveMultiple>" +
" </soap:Body>" +
"</soap:Envelope>" +
"";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction"," http://schemas.microsoft....ervices/RetrieveMultiple");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);
var resultXml = xmlHttpRequest.responseXML;
//alert(resultXml);
if (resultXml != null)
{
var names = resultXml.selectNodes("//BusinessEntity/q1:" + sAttributeName);
if (names != null)
{
if (names.length > 0)
{
return names[0].text;
}
}
return "*Error*";
}
}

}
else
{
//If typename is not contact, use the name property of the lookup
accountName = lookupItem[0].name;
}
}

//Set ForceSubmit to True for disabled or read-only fields to submit them.
crmForm.all.new_account.ForceSubmit = true;

//Assign accountName to the CRMForm field
crmForm.all.new_account.DataValue = accountName;
Ik zou zelf niet de naam van het account willen weten maar juist de echte relatie tussen Aanvraag en Account & Contact maken. Dit is mogelijk in CRM 4.

Op deze manier kan je een case koppelen aan een Account en Contact.
Het veld Customerid zou je kunnen gebruiken voor Contact en vervolgens een andere lookup naar Account maken. Deze lookup kan je ook weer vullen op basis van de gekozen contact.

Succes.

[ Voor 89% gewijzigd door bassio op 08-09-2008 21:30 ]


Verwijderd

Topicstarter
Bedankt voor je reactie en script, ik kom er echter helaas nog niet uit. Ik denk dat het bij onderstaande fout gaat? Ik vind de kenmerken, die daarin genoemd worden nergens terug, zoals bijv. parentcustomerid, etc. En wat is precies de guid van de entiteit?
//Aanroep van de functie:
//De eerste parameter is de entiteit waar het veld staat waar je de waarde van wilt hebben
//De tweede parameter is de guid van de entiteit waar het veld staat
//De derde parameter is het veld waar je de waarde uit wil hebben

var accountid = GetAttributeValueFromID("contact", crmForm.all.customerid.DataValue[0].id, "parentcustomerid");
accountName = GetAttributeValueFromID("account", accountid, "name");
Bedankt voor al je moeite _/-\o_

  • bassio
  • Registratie: Oktober 2000
  • Laatst online: 22:59
De GUID is het unieke ID van een Record. Deze heb je altijd nodig om een bepaald veld van een record op te halen.

De onderstaande regel moet je als volgt lezen:
var accountid = GetAttributeValueFromID("contact", crmForm.all.customerid.DataValue[0].id, "parentcustomerid");
Vul de variabele AccountID met de GUID van het bedrijf waar de contactpersoon aan gekoppeld is.
"Contact" geeft aan dat je een waarde van een record van het type contact wil halen. .
crmForm.all.customerid.DataValue[0].id geeft aan welke contactpersoon dit is.
"parentcustomerid" is het veld waar we de waarde van terug willen krijgen, in dit geval de GUID van het bedrijf waar de contactpersoon aan gekoppeld is.

Vervolgens doet deze regel het volgende:
accountName = GetAttributeValueFromID("account", accountid, "name");
Vul het veld accountname met de naam van het bedrijf waar we in de vorige stap de GUID van opgehaald hebben.

Het script moet het als het goed is gewoon doen wanneer je een contactpersoon kiest die aan een bedrijf gekoppeld is.

Ik hoop dat je er zo uitkomt. Succes.

Verwijderd

Topicstarter
Het script werkt helaas niet. Ik heb het ingevoerd, toegepast en gepubliceerd, maar de account wordt niet automatisch ingevuld na het invullen van de contactpersoon. :|
Pagina: 1