ISV Config - Button

15. Juni 2010 16:29

Hallo,

ich möchte einen eigenen Button oder Menüeintrag in meine Entität "New_Vertriebstour" einblenden.
Wie funtkioniert das?

Über die ISV Config kann ich es z.B. bei den Aktivitäten machen. Aber wie würde das bei einer eigenen Entität aussehen?

z.B.
Code:
        <Entity name="activitypointer">
          <Grid>
            <MenuBar>
              <Buttons>
                <Button Icon="/_imgs/ico_32_134.gif" Client="Web" AvailableOffline="true">
                  <Titles>
                    <Title LCID="1033" Text="Aktivitäten schließen" />
                  </Titles>
                  <ToolTips>
                    <ToolTip LCID="1033" Text="Schließt alle selektierten Aktivitäten." />
                  </ToolTips>
                </Button>
              </Buttons>
            </MenuBar>
          </Grid>
        </Entity>
      </Entities>
Zuletzt geändert von tw-elektric am 16. Juni 2010 11:33, insgesamt 2-mal geändert.

Re: ISV Config - Button

15. Juni 2010 16:35

Hallo,

genau wie bei den Aktivitäten. Ersetze einfach <Entity name="activitypointer"> durch <Entity name="meine Entitaet">, und schon wird der Button angezeigt.

Re: ISV Config - Button

16. Juni 2010 08:29

Hallo Michael,

danke für deine AW.
Aber ich hätte es gerne in der geöffneten Entität.
Siehe Bild:
bild.jpg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: ISV Config - Button

16. Juni 2010 09:11

Hallo,

dann einfach so (steht auch im SDK und in der Default isv-config, die mit dem CRM mitgeliefert wird)
Code:
        <Entity name="deine Entitaet">
          <ToolBar ValidForCreate="0" ValidForUpdate="1">
            <Button Icon="/_imgs/ico_18_debug.gif" Url="http://www.microsoft.com" PassParams="1" WinParams="" WinMode="0">
              <Titles>
                <Title LCID="1033" Text="asdf" />
              </Titles>
              <ToolTips>
                <ToolTip LCID="1033" Text="Info on Test" />
              </ToolTips>
            </Button>
        </Entity>

Re: ISV Config - Button

16. Juni 2010 09:36

Hallo Michael,

ich habe die originale ISV Config nicht mehr :(

Habe es nun auf deinem Weg versucht, leider bekomme hier ein Fehler beim hochladen.
Sollte doch eig. alles stimmen.

Und nun noch eine Frage, ich befinde mich z.B. hier: http://srv04:5555/tw-elektric/userdefined/edit.aspx?id={4653CE59-8B77-DF11-8042-00155D820B08}&etc=10004# (new_vertriebstour Datensatz)
Nun möchte ich auf meinem Button klicken, welcher mich in deinem Beispiel ja auf die HP von Microsoft weiterleitet.
Nun würde ich gerne die ID in dem Link mitgeben, wie geht das?

Code:
<ImportExportXml version="4.0.0.0" languagecode="1031" generatedBy="OnPremise">
  <Entities>
  </Entities>
  <Roles>
  </Roles>
  <Workflows>
  </Workflows>
  <IsvConfig>
    <configuration version="3.0.0000.0">
      <Root />
      <!-- Microsoft Customer Relationship Management Entities (Objects) -->
      <Entities>
        <Entity name="activitypointer">
          <Grid>
            <MenuBar>
              <Buttons>
                <Button Icon="/_imgs/ico_32_134.gif" JavaScript="&#xD;&#xA;&#xD;&#xA;                        var grid = document.getElementById('gridBodyTable');&#xD;&#xA;&#xD;&#xA;                        var a = document.all['crmGrid'].InnerGrid.SelectedRecords; &#xD;&#xA;&#xD;&#xA;                        var selectedItems = new Array(a.length); &#xD;&#xA;&#xD;&#xA;                        for (var i=0; i &lt; a.length; i++) &#xD;&#xA;&#xD;&#xA;                        { &#xD;&#xA;&#xD;&#xA;                        var stateReq = '';&#xD;&#xA;&#xD;&#xA;                        var stateType = '';&#xD;&#xA;&#xD;&#xA;                        var state = 'Completed';&#xD;&#xA;&#xD;&#xA;                        var status = '-1';&#xD;&#xA;&#xD;&#xA;                         if(a[i][1] == '4212')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateTaskRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'Task';&#xD;&#xA;&#xD;&#xA;                          }&#xD;&#xA;&#xD;&#xA;                        else if(a[i][1] == '4210')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStatePhoneCallRequest'; &#xD;&#xA;&#xD;&#xA;                          stateType= 'PhoneCall';&#xD;&#xA;&#xD;&#xA;                          }&#xD;&#xA;&#xD;&#xA;                        else if(a[i][1] == '4207')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateLetterRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'Letter';&#xD;&#xA;&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;                        else if(a[i][1] == '4204')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateFaxRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'Fax';&#xD;&#xA;&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;                        else if(a[i][1] == '4214')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateServiceAppointmentRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'ServiceAppointment';&#xD;&#xA;&#xD;&#xA;                          state = 'Closed';&#xD;&#xA;&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;                        else if(a[i][1] == '4201')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateAppointmentRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'Appointment';&#xD;&#xA;&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;                       else if(a[i][1] == '4402')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateCampaignActivityRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'CampaignActivity';&#xD;&#xA;&#xD;&#xA;                          state = 'Closed';&#xD;&#xA;&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;                       else if(a[i][1] == '4401')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateCampaignResponseRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'CampaignResponse';&#xD;&#xA;&#xD;&#xA;                       }&#xD;&#xA;&#xD;&#xA;                       else if(a[i][1] == '4202')&#xD;&#xA;&#xD;&#xA;                         {&#xD;&#xA;&#xD;&#xA;                          stateReq = 'SetStateEmailRequest';&#xD;&#xA;&#xD;&#xA;                          stateType= 'Email';&#xD;&#xA;&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;                            var xml = '' + &#xD;&#xA;&#xD;&#xA;'&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;' + &#xD;&#xA;&#xD;&#xA;                            '&lt;soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;' + &#xD;&#xA;&#xD;&#xA;                            '  &lt;soap:Header&gt;' + &#xD;&#xA;&#xD;&#xA;                '    &lt;CrmAuthenticationToken xmlns=&quot;http://schemas.microsoft.com/crm/2007/WebServices&quot;&gt;' + &#xD;&#xA;&#xD;&#xA;                            '      &lt;AuthenticationType xmlns=&quot;http://schemas.microsoft.com/crm/2007/CoreTypes&quot;&gt;0&lt;/AuthenticationType&gt;' + &#xD;&#xA;&#xD;&#xA;                            '      &lt;OrganizationName xmlns=&quot;http://schemas.microsoft.com/crm/2007/CoreTypes&quot;&gt;tw-elektric&lt;/OrganizationName&gt;' + &#xD;&#xA;&#xD;&#xA;                            '      &lt;CallerId xmlns=&quot;http://schemas.microsoft.com/crm/2007/CoreTypes&quot;&gt;00000000-0000-0000-0000-000000000000&lt;/CallerId&gt;' + &#xD;&#xA;&#xD;&#xA;                            '    &lt;/CrmAuthenticationToken&gt;' + &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;                            '  &lt;/soap:Header&gt;' + &#xD;&#xA;&#xD;&#xA;                            '  &lt;soap:Body&gt;' + &#xD;&#xA;&#xD;&#xA;                            '    &lt;Execute xmlns=&quot;http://schemas.microsoft.com/crm/2007/WebServices&quot;&gt;' + &#xD;&#xA;&#xD;&#xA;                            '      &lt;Request xsi:type=&quot;'+stateReq+'&quot;&gt;' + &#xD;&#xA;&#xD;&#xA;                            '        &lt;EntityId&gt;' + a[i][0] + '&lt;/EntityId&gt;' + &#xD;&#xA;&#xD;&#xA;                            '        &lt;'+stateType+'State&gt;'+state+'&lt;/'+stateType+'State&gt;'+&#xD;&#xA;&#xD;&#xA;                            '        &lt;'+stateType+'Status&gt;' +  status + '&lt;/'+stateType+'Status&gt;'+&#xD;&#xA;&#xD;&#xA;                            '    &lt;/Request&gt;' + &#xD;&#xA;&#xD;&#xA;                            '    &lt;/Execute&gt;' + &#xD;&#xA;&#xD;&#xA;                            '  &lt;/soap:Body&gt;' + &#xD;&#xA;&#xD;&#xA;                            '&lt;/soap:Envelope&gt;' + &#xD;&#xA;&#xD;&#xA;                            '';&#xD;&#xA;&#xD;&#xA;                            var xmlHttpRequest = new ActiveXObject('Msxml2.XMLHTTP');&#xD;&#xA;&#xD;&#xA;                            xmlHttpRequest.Open('POST', '/mscrmservices/2007/CrmService.asmx', false);&#xD;&#xA;&#xD;&#xA;                            xmlHttpRequest.setRequestHeader('SOAPAction','http://schemas.microsoft.com/crm/2007/WebServices/Execute');&#xD;&#xA;&#xD;&#xA;                            xmlHttpRequest.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');&#xD;&#xA;&#xD;&#xA;                            xmlHttpRequest.setRequestHeader('Content-Length', xml.length);&#xD;&#xA;&#xD;&#xA;                            xmlHttpRequest.send(xml);&#xD;&#xA;&#xD;&#xA;                            var resultXml = xmlHttpRequest.responseXML;                        &#xD;&#xA;&#xD;&#xA;                        } &#xD;&#xA;&#xD;&#xA;                        window.crmGrid.Refresh(); &#xD;&#xA;&#xD;&#xA;" Client="Web" AvailableOffline="true">
                  <Titles>
                    <Title LCID="1033" Text="Aktivitäten schließen" />
                  </Titles>
                  <ToolTips>
                    <ToolTip LCID="1033" Text="Schließt alle selektierten Aktivitäten." />
                  </ToolTips>
                </Button>
              </Buttons>
            </MenuBar>
          </Grid>
        </Entity>
   
      <Entity name="new_vertriebstour">
          <ToolBar ValidForCreate="0" ValidForUpdate="1">
            <Button Icon="/_imgs/ico_18_debug.gif" Url="http://www.microsoft.com" PassParams="1" WinParams="" WinMode="0">
              <Titles>
                <Title LCID="1033" Text="GPS" />
              </Titles>
              <ToolTips>
                <ToolTip LCID="1033" Text="GPS Daten herunterladen" />
              </ToolTips>
            </Button>
        </Entity>
      
      </Entities>
    

    
      <!-- Microsoft Customer Relationship Management Service Management Customization -->
      <ServiceManagement>
        <AppointmentBook>
          <SmoothScrollLimit>2000</SmoothScrollLimit>
          <TimeBlocks>
            <!-- All CSS Class mapping for Service activities -->
            <TimeBlock EntityType="4214" StatusCode="1" CssClass="ganttBlockServiceActivityStatus1" />
            <TimeBlock EntityType="4214" StatusCode="2" CssClass="ganttBlockServiceActivityStatus2" />
            <TimeBlock EntityType="4214" StatusCode="3" CssClass="ganttBlockServiceActivityStatus3" />
            <TimeBlock EntityType="4214" StatusCode="4" CssClass="ganttBlockServiceActivityStatus4" />
            <TimeBlock EntityType="4214" StatusCode="6" CssClass="ganttBlockServiceActivityStatus6" />
            <TimeBlock EntityType="4214" StatusCode="7" CssClass="ganttBlockServiceActivityStatus7" />
            <TimeBlock EntityType="4214" StatusCode="8" CssClass="ganttBlockServiceActivityStatus8" />
            <TimeBlock EntityType="4214" StatusCode="9" CssClass="ganttBlockServiceActivityStatus9" />
            <TimeBlock EntityType="4214" StatusCode="10" CssClass="ganttBlockServiceActivityStatus10" />
            <!-- All CSS Class mapping for Appointments -->
            <TimeBlock EntityType="4201" StatusCode="1" CssClass="ganttBlockAppointmentStatus1" />
            <TimeBlock EntityType="4201" StatusCode="2" CssClass="ganttBlockAppointmentStatus2" />
            <TimeBlock EntityType="4201" StatusCode="3" CssClass="ganttBlockAppointmentStatus3" />
            <TimeBlock EntityType="4201" StatusCode="4" CssClass="ganttBlockAppointmentStatus4" />
            <TimeBlock EntityType="4201" StatusCode="5" CssClass="ganttBlockAppointmentStatus5" />
            <TimeBlock EntityType="4201" StatusCode="6" CssClass="ganttBlockAppointmentStatus6" />
          </TimeBlocks>
        </AppointmentBook>
      </ServiceManagement>
    </configuration>
  </IsvConfig>
  <EntityMaps />
  <EntityRelationships />
  <Languages>
    <Language>1031</Language>
    <Language>1033</Language>
  </Languages>
</ImportExportXml>

Re: ISV Config - Button

16. Juni 2010 10:31

Okay, dass einblenden geht nun:

Code:
        <Entity name="new_vertriebstour">
          <ToolBar ValidForCreate="0" ValidForUpdate="1">
            <Button Icon="/_imgs/ico_18_debug.gif" Url="http://www.microsoft.com" PassParams="1" WinParams="" WinMode="0">
              <Titles>
                <Title LCID="1033" Text="GPS" />
              </Titles>
              <ToolTips>
                <ToolTip LCID="1033" Text="GPS Daten downloaden" />
              </ToolTips>
            </Button>
            </ToolBar>     
        </Entity>

Re: ISV Config - Button

16. Juni 2010 10:41

Hallo,
wie due per JavaScript an die ID des aktuellen Fensters kommst, ist hier beschrieben:
http://hassanhussain.wordpress.com/2009 ... -ms-crm-40

Re: ISV Config - Button

16. Juni 2010 11:10

michael sulz hat geschrieben:Hallo,
wie due per JavaScript an die ID des aktuellen Fensters kommst, ist hier beschrieben:
http://hassanhussain.wordpress.com/2009 ... -ms-crm-40


Okay, danke.
Aber ich kann dich in die ISV Config kein JavaScript rein nehmen.
Oder geht das?

Re: ISV Config - Button

16. Juni 2010 11:15

Hallo,

natprlich kannst du sowohl in der Sitemap wie auch in die ISV.config Java Script aufnehmen.

<Button Icon="/_imgs/ico_18_debug.gif" JavaScript="alert('test');">

Re: ISV Config - Button

16. Juni 2010 11:34

Okay, super danke.

Ich habe es nun auf diesem Weg versucht, leider funktioniert nun das Hochladen nicht mehr, so dass ich nen Syntax-Fehler haben muss.
Aber so sollte es doch eig. gehen?

Code:
 <Entity name="new_vertriebstour">
          <ToolBar ValidForCreate="0" ValidForUpdate="1">
            <Button Icon="/_imgs/ico_18_debug.gif" JavaScript="
         &#xD;&#xA;&#xD;&#xA;                        var varParameter = GetQueryString('id');
         &#xD;&#xA;&#xD;&#xA;                        if(varParameter != null)
         &#xD;&#xA;&#xD;&#xA;                     {
         &#xD;&#xA;&#xD;&#xA;                     if (varParameter.length > 0)
         &#xD;&#xA;&#xD;&#xA;                        {
         &#xD;&#xA;&#xD;&#xA;                        }
         &#xD;&#xA;&#xD;&#xA;                     }
         &#xD;&#xA;&#xD;&#xA;                  function GetQueryString(paramName)
         &#xD;&#xA;&#xD;&#xA;                  {
         &#xD;&#xA;&#xD;&#xA;                  queryString = window.location.search.substring(1);
         &#xD;&#xA;&#xD;&#xA;                  params = queryString.split('&');
         &#xD;&#xA;&#xD;&#xA;                  for (i=0;i<params.length;i++)
         &#xD;&#xA;&#xD;&#xA;                     {
         &#xD;&#xA;&#xD;&#xA;                     param = params[i].split'=';
         &#xD;&#xA;&#xD;&#xA;                     if (param[0] == paramName)
         &#xD;&#xA;&#xD;&#xA;                        {
         &#xD;&#xA;&#xD;&#xA;                        return param[1];
         &#xD;&#xA;&#xD;&#xA;                        }
         &#xD;&#xA;&#xD;&#xA;                     }
         &#xD;&#xA;&#xD;&#xA;                  }
         &#xD;&#xA;&#xD;&#xA;                  alert(varParameter);&#xD;&#xA;&#xD;&#xA;   
      
         " PassParams="1" WinParams="" WinMode="0">
              <Titles>
                <Title LCID="1033" Text="GPS" />
              </Titles>
              <ToolTips>
                <ToolTip LCID="1033" Text="GPS Daten downloaden" />
              </ToolTips>
            </Button>
            </ToolBar>     
        </Entity>

Re: ISV Config - Button

16. Juni 2010 11:58

Hallo,

das JavaScript muss ohne Zeilenumbrüche in die ISV-config eingebaut werden, sonst funktioniert das hochladen nicht.

Re: ISV Config - Button

16. Juni 2010 12:56

Mhh, da muss noch irgendwo anderst ein Problem vorliegen.
Ich habe jetzte alles in eine Zeile geschrieben und erhalte immer noch den Fehler.
Entferne ich den Inhalt des Java Tags, so klappt es.

Code:
<Entity name="new_vertriebstour">
          <ToolBar ValidForCreate="0" ValidForUpdate="1">
            <Button Icon="/_imgs/ico_18_debug.gif" JavaScript="&#xD;&#xA;&#xD;&#xA;var varParameter = GetQueryString('id');&#xD;&#xA;&#xD;&#xA;if(varParameter != null)&#xD;&#xA;&#xD;&#xA;{&#xD;&#xA;&#xD;&#xA;if (varParameter.length > 0)&#xD;&#xA;&#xD;&#xA;{&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;function GetQueryString(paramName)&#xD;&#xA;&#xD;&#xA;{&#xD;&#xA;&#xD;&#xA;queryString = window.location.search.substring(1);&#xD;&#xA;&#xD;&#xA;params = queryString.split('&');&#xD;&#xA;&#xD;&#xA;for (i=0;i<params.length;i++)&#xD;&#xA;&#xD;&#xA;{&#xD;&#xA;&#xD;&#xA;param = params[i].split'=';&#xD;&#xA;&#xD;&#xA;if (param[0] == paramName)&#xD;&#xA;&#xD;&#xA;{&#xD;&#xA;&#xD;&#xA;return param[1];&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;alert(varParameter);&#xD;&#xA;&#xD;&#xA;" PassParams="1" WinParams="" WinMode="0">
              <Titles>
                <Title LCID="1033" Text="GPS" />
              </Titles>
              <ToolTips>
                <ToolTip LCID="1033" Text="GPS Daten downloaden" />
              </ToolTips>
            </Button>
            </ToolBar>     
        </Entity>