Operation of Qvidian Proposal Automation (QPA) CRM APIs Last Updated: 10/30/2012
Background QPA is the leading application for the production of structured sales documents and for the management and completion of complex RFPs. Qvidian s clients primarily require the integration of QPA with their CRM applications to permit QPA to pull in contact and addressing information used to populate fields in the document(s) that they are creating using QPA. The QPA CRM API enables QPA to connect and work with external CRM systems. This integration allows QPA users to retrieve contact information residing in the customer s CRM application. Several CRM plug-ins are shipped with QPA as a vehicle for clients to configure the necessary connection information between QPA and their CRM application. QPA currently supports the following CRMs: Microsoft CRM Outlook Salesforce.com Oracle on Demand Configuring Plug-ins To access the plug-ins from the Options menu in QPA, a user selects CRM Setup to display the current CRM applications supported by QPA. The user will need to enter his/her (e.g., Salesforce.com) Username/Password, which will be stored by QPA, and employed whenever a connection is required between the two applications (i.e., whenever the user wishes to retrieve contact information into a QPA project). All usernames and passwords are encrypted (Using the Data Encryption Standard (DES) encryption key) while stored in QPA s database. Clients may create their own plug-ins to enable integrations with 3 rd party applications. Any.Net assembly which is inserted into the QPA plug-in folder (Path: bin\crm, under the QPA virtual directory on the server upon which it is installed) populates the screen as a choice for the user. When the user selects this created plug-in, QPA will create an instance of your assembly and prompt the user to enter the following information: Username (for the 3 rd party application) Password, (for the 3 rd party application) Server name or URL, (if appropriate - not required for Salesforce.com) A custom field (if appropriate) 1
User operation Once the configuration has been performed, the integration will be available for use within QPA projects. Upon opening a QPA Data Entry Screen Component, the user will be able to enter values in any of the available fields in the screen, and then access a CRM Data menu in the toolbar. By clicking on the Retrieve Data option, the values entered will be passed via the plug-in to Salesforce.com, and a search is initiated to identify results that match those values. After selecting the appropriate value from the list, the data is automatically retrieved and entered into the appropriate fields in the Data Entry Screen Component. CRM Communication All CRM requests are performed by the QPA server on behalf of the client, rather than directly by the client. All requests are made in a read-only mode and exclusively using tables/methods that return contact information form the CRM systems. For each CRM system, each provider s best-practices are followed with respect to communication and connection. In Salesforce.com (SFDC), for example, the SalesForceWSDL is utilized. Initial communication is over an http connection and then all further communication uses https. The credentials specified by the user during CRM Setup are used to establish a SFDC session, that connection returns a session ID that is used for all further communication. Configuring custom plug-ins QPA assumes that all plug-ins implement the IQvidianCRMConfiguration2 interface. This interface must include the following calls: ArrayList LoadContactData(ByVal searchdata As ContactData) This call should return the CRM contact data requested. QPA will load the ContactData structure with any existing values from the form. If the CRM system supports searching, it should search for data matching these values. Otherwise, it will return the record currently selected in the CRM application. It is not mandatory for this call for all of the values in the ContactData structure to be completed, although the QPA user may then be required to manually type in any missing values to complete population of the form. If more than one CRM contact matches the search criteria, all matches should be returned in the array, such that the user may review the list, and then to select the appropriate record. GetFriendlyName()As String This should return the user-recognizable name for the plug-in. This will be displayed on the Contact Info data form. RestoreSetupInfo (ByVal username As String, ByVal password As String, ByVal server As String, ByVal custom As String) 2
This is called to restore the saved user information. This will be called before LoadContactData, AddLink or AddActivity. AddLink(ByRef resultdata As NotesData) This is called when a project is built in QPA. The NotesData structure will contain the current information for that project. AddActivity(ByRef resultdata As ActivityData) This is not currently used. HasUsername () As Boolean This should return true if you require the User to be prompted to enter a Username. HasPassword () As Boolean This should return true if you require the User to be prompted to enter a Password. HasServer () As Boolean This should return true if you require the user to be prompted to enter a server name. HasCustomField () As Boolean This should return true if you require the user to be prompted to enter a custom field. GetCutomFieldLabel ()As String This should return the string for the user to indicate for what the custom field is used. HasClientCode ()As Boolean This should return if you have client side code to be called for CRM integration. GetClientCode ()As String This should return your client side JavaScript or VB script code. This code will be added to the page and called when the user needs to retrieve contact information. GetClientCodeLoadContactFunction ()As String This should return the name of your client side LoadContact function. This function should look something like: Function GetContact(objData)...Code which fills in objdata In this case, GetClientCodeLoadContactFunction would return GetContact 3
GetClientCodeAddLinkFunction ()As String This should return the name of your client side AddLink function. This function should look something like: Function AddMyLink(objData)...Code which uses objdata In this case, GetClientCodeAddLinkFunction would return AddMyLink GetClientCodeAddActivityFunction()As String This is not currently used. CRM Structures The following structures are used by the QPA CRM interface and are defined in: C:\Inetpub\wwwroot\Qvidian\bin\QvidianCRMInterface.dll ContactData String ContactID This should be a unique ID which can be used to identity this contact. This is generated by your CRM system and stored but not used by QPA. String LegalCompName; This should be the full name of the contacts company. String ShortCompName; This should be any shortened or informal name of the contacts company. String Salutation; This should be the salutation for this contact. Currently allowed values are Mr., Ms., Mrs. and Dr.. String FirstName; This should be the first name of the contact. String MiddleName; This should be the middle name of the contact. String LastName; This should be the last name of the contact. String Title; This should be the title for this contact. String Address1; This should be the first line of the address for this contact. 4
String Address2; This should be the second line of the address for this contact. String City; This should be the city name for this contact. String State; This should be the state name for this contact. String Zip; This should be the postal code for this contact. String Country; This should be the country name for this contact. String Phone; This should be the phone number for this contact. String Fax; This should be the fax number for this contact. String Email; This should be the SMTP compatible email address for this contact. NotesData String scontactid This should be a unique ID which can be used to identity this contact. This is generated by your CRM system and stored but not used by QPA. String sprojectname This is the project name entered by the user in QPA. String sactivitytype This is a string indicating the type of activity to create. For document building, it will be History. String sdocumenttype This is a string indicating the type of QPA document which was created (e.g., Formal Proposal, Business Letter, etc.). String sfullpath This is a string showing the full system path to where the document was saved. Date ddatetimeoftask This is the date that the document was built. 5
String saction This is a string indicating the type of action to perform. This field is not currently used. String sdetails This is a string with any other comments or details QPA might have for the project. 6