iModules Web Services 2.1 - Engineering Documentation

Follow
TABLE OF CONTENTS

 

Overview

Web Services are designed to help make it easier for software applications to communicate. Web Services allow clients to retrieve and update raw data in the system. They help to solve the interoperability problem between provider and client systems by giving different systems a way to link their data and to exchange data between applications and platforms.

With Web services, a client’s database (such as fundraising data) can connect with their iModules system to make information exchange easier. The information exchange can be set up by the client to happen automatically on a recurring basis, instead of downloading a file and then loading it into the system. Web Services allows clients, for example, to get all data, or just updated information from their iModules system to update their database. Clients can use Web Services Version 2.x to query and update Event and Campaign data as well as for Profile data (available since Version 1.0). Our clients most commonly use Web Services to sync constituent data like name, address, email, and phone numbers.

Definitions

Web Services – Web Services provide a standardized way of integrating Web-based applications using the XML, SOAP, WSDL and UDDI open standards over the internet. XML is used to tag the data, SOAP is used to transfer the data, WSDL is used for describing the services available and UDDI is used for listing what services are available. Web services allow organizations to communicate data without detailed knowledge of each other's IT systems behind the firewall.

SOAP – Simple Object Access Protocol. SOAP provides the envelope for sending Web Services messages. SOAP provides a way to communicate between applications running on different operating systems, with different technologies and programming languages. SOAP messages are independent of any operating system or protocol and may be transported using a variety of Internet protocols, including SMTP, MIME, and HTTP.

XML – Extensible Markup Language. XML is a markup language much like HTML; however, XML is designed to carry data, not to display data. It allows designers to create their own customized tags, enabling the definition, transmission, validation, and interpretation of data between applications and between organizations.

WSDL – Web Services Description Language. WSDL is an XML-based language for describing Web services and how to access them. WSDL is also used to locate Web services.

Form – iModules includes many types of forms within Encompass: Profile Forms, Event Forms, Campaign Forms, Membership Forms, and regular Forms. With iModules Web Services 2.x, web services that refer to a form could be any of these types.

Instance fields – Within Encompass, an instance field is one in which there may be multiple values per member. An instance field on a form provides for unique entry each time the form is submitted. A commerce field is always an instance field. Non-instance fields always retain a single value, for example first and last name, or email.

Nonmember transactions – un-authenticated transactions tied to a nonmember (or unknown) account

Location and Access

iModules Web Services 2.x can be accessed by appending a service name to a base URL:

Current version:

  • United States base URL: https://api.imodules.com/ws/21/
  • Canada base URL: https://apica.imodules.com/ws/21/
  • Australia base URL: https://apiau.imodules.com/ws/21/

The available services are:

<![CDATA[GeneralQuery.asmx ]] >– Provides access to non-instance fields that are not specific to any Form.  Direct URL

<![CDATA[ControlQuery.asmx]] > – All fields that are specific to a Form (represented by a control ID). Accessing a Control method and specifying a control ID of “0” is the same as accessing a General method.  Direct URL

<![CDATA[TransactionsQuery.asmx ]] >– Instance fields that are specific to a commerce transaction, useful for reconciliation reporting.  Direct URL

<![CDATA[EmailCategoryQuery.asmx ]] >– Allows the import and export of Email Category opt-out and opt-in information.  Direct URL

<![CDATA[LoginQuery.asmx ]] >– Allows logging a constituent in by proxy.  Direct URL

<![CDATA[MemberMergeQuery.asmx]] > – Allows queuing a non-member record and an associated constituent record for the nightly Member Merge process.  Direct URL

<![CDATA[ContentQuery.asmx]] > – Allows pulling event listing / calendars, and event content information.  Direct URL

 

If you do not have credentials for your site, please contact your iModules Account Manager.

Staging Environment

A staging environment is available for testing middleware against any changes made to the iModules Web Services (enhancements/defect fixes) prior to the release of such changes to the live production environment. The staging environment will allow you to actually see how the change will function in your particular environment and test your middleware against it. This solution will help to ensure that clients are satisfied with the changes to Web Services and that changes to the services are not breaking anything in the process of moving data. This is one of many solutions in place to keep client data synchronization processes from being disrupting following a release. The intended staging period is from the time that a code change has been successfully verified by the iModules QA Team through the actual release of the code change to production (This time period is typically at least one month).

The Web Services Staging Environment is available to any Web Services client when:

  • An agreement on a test site has been made. A separate Web Services login (GUID) and password will be given for this site.
  • A one-time request to have your test site receive the staging code base following each development sprint has been made with your iModules representative.

Separate Staging Web Service URLs are used in conjunction with test sites on the staging code base and can be accessed at the following base URL:

https://stagewebservices.imodules.com/ws/21/

If there are enhancements or defect fixes that have affected the Web Services, regular email communication will be made following the development sprint announcing that the new codebase is available. 

Character Encoding

iModules Web Services use UTF-8 encoding to meet the expected XML standard and support of foreign characters. 

Date Criteria

When using the GetMembersChangedDuring or GetMembersChangedSince methods, the criteria used for the rows returned depend on the values specified in the changedColumns parameter. If this parameter is populated, the query returns rows for which the specified fields have been updated within the timeframe.

If this parameter is not populated, the query returns rows for which the system “last_updated” field matches the specified timeframe. If transactions were requested, then time frame will also be used for the criteria for the rows returned, with the results returned based on transactions with purchase dates that match the date criteria.

Datetime Format

In order to help support the needs of international clients, all dates and date/times are returned in a format that conforms to the ISO 8601 standard.

YYYY-MM-DDThh:mm:ss

This is also the accepted format in Web Services requests for datetime parameter values, such as changedFrom, changedTo, and changedSince. Date values can be provided without the use of the time value.

All dates are provided or accepted in North American Central Daylight time. (Time zone offset: UTC - 5 hours. CDT is 5 hours behind Coordinated Universal Time (UTC). Note that CDT is a daylight saving time/summer time zone.)

<MemberInformation Constituent_Id="000000">
 <Column Name="date_added" Value="2008-02-19T08:49:42"/>
</MemberInformation>

Filters

Filter parameters allow the results of a web service method to have a custom filter applied. The syntax for this statement is very similar to a SQL “where” clause.

Filter Syntax

The syntax of the filter parameter supports the following:

    • The inclusion of any field returned by the applicable GetAllColumns web service method. The Field should be enclosed in square brackets.
    • Multiple criteria statement joined with “and” or “or”.
    • Grouping of criteria statement using parentheses.
    • The “=“, “<>”, “>”, “<”, “>=”, “<=”, “like”, “not like”, “is” and “is not” operators.
    • Integer, decimal, date and string value types. String values should be enclosed in single quotes and may contain escaped single quotes.

Filter Examples

The following are some common example of filters applied to web service method results:

    • Return records with a first name of Tom: [First_Name] = ‘Tom’
    • Returns all records that do not have a last name of O’Brian: [Last_Name] <> ‘O’’Brian’ (note the two ’, not one ”)
    • Return all records with a class year equal to or greater than 2000 and less than 2008 (not including 2008): [Class_Year] >= 2000 and [Class_Year] < 2008
    • Returns records with a last name of Smith and a first name of Tom or Thomas: ([First_Name] = ‘Tom’ or [First_Name] = ‘Thomas’) and [Last_Name] = ‘Smith’
    • Return records with a first name starting with T: [First_Name] like ‘T%’
    • Return records with a first name containing T: [First_Name] like ‘%t%’
    • Return records with a first name ending with T: [First_Name] like ‘%t’
    • Return records with email addresses: [Email_Address] is not null 

Identifiers

There are two types of identifiers in the system: those that identify non-instance data and those that identify instance data.

Non-instance Identifiers

    • Non-instance identifiers identify a single constituent in the system. In relation to web services, these identifiers are always referred to as Constituent ID, even though it may be configured differently within the site. This is done to support a standard XML definition.
    • Non-instance identifiers may or may not be editable depending on site configuration. In the absence of an editable secondary identifier, IModules uses the system generated identifier member_id instead, which itself is not editable.
    • Some examples of non-instance data include first name, last name, and email.

Instance Identifiers

    • Instance identifiers identify a data item for a particular constituent, though the constituent may have multiple instanced values for the item. Instance data may be referenced through the system-generated instance ID or through an optionally configured external row ID.
    • External row identifiers are immutable fields that adhere to a particular naming convention as defined in the client’s database of record. The value of an external row identifier may be set for any instance that is created via web services.
    • An example of instance data is the amount donated to a campaign. Each will be referred to by a unique instance identifier.

In combination

    • In the event that both an instance ID and external row ID is specified for an instance, the system ensures that they refer to the same instance. If this is not the case, the system will return an error. 

Methods

GeneralQuery

  • Biographical Updates | General fields (non-instance fields that are not specific to GeneralQuery an Event or Campaign) are available through the General methods (web service methods defined in the GeneralQuery web service).

    • GetAllColumns – returns all General Fields available. These are the fields available to query on or update when accessing General methods.
    • GetMembers - returns all constituent records meeting the required filter.
    • GetMembersChangedDuring – returns all constituents records that have been changed within the specified timeframe.
    • GetMembersChangedSince – returns all constituent records that have been changed since the specified date.
    • GetOneMember – returns the specified fields for the member matching the specified constituent ID.
    • GetOneMemberByMemberId – Returns the specified fields for the member matching the specified iModules member ID.
    • Update – allows fields to be updated and rows to be added. This method is only available when using the SOAP protocol due to the complex nature of the parameters this method requires.
    • UpdateKeepChanged – allows fields to be updated and rows to be added. This method is only available when using the SOAP protocol due to the complex nature of the parameters this method requires. UpdateKeepChanged provides the ability to avoid overwriting fields that have been updated online over a certain period of time. 

General Query Samples (SOAP envelope not shown in all cases) 

GetAllColumns Response
<ArrayOfAllColumnResults>
 <AllColumnResults Column="first_name" Column_Info="nvarchar,75" Instance="false"/>
 <AllColumnResults Column="last_name" Column_Info="nvarchar,75" Instance="false"/>
 <AllColumnResults Column="donation_amount" Column_Info="money" Instance="true"/>
</ArrayOfAllColumnResults >

Update Call (making a simple member fields request)

Update Call (making a simple members fields request)
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:// www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <Update xmlns="http://imodules.com/WebServices/GeneralQuery/">
   <login>XXXXXXXXXXXXXXXXXXXXX</login>
   <password>XXXXXXXXXXXXX</password>
   <allowAddingConstituents>true</allowAddingConstituents>
   <MemberInformation Constituent_Id="0000409961">
     <Column Name="First_name" Value="Paul"/>
     <Column Name="Last_name" Value="Pickle"/>
     <Column Name="address_1" Value="1010 Main"/>
     <Column Name="address_2" Value=""/>
     <Column Name="City" Value="Boston"/>
     <Column Name="state" Value="MA"/>
     <Column Name="Zipcode" Value="02345"/>
     <Column Name="country" Value="United States"/>
     <Column Name="BusStreet1" Value="1234 Legends Way"/> 
     <Column Name="BusStreet2" Value=""/>
     <Column Name="BusStreet3" Value=""/>
     <Column Name="BusCity" Value="Boston"/>
     <Column Name="BusState" Value="MA"/>
     <Column Name="BusZip" Value="02114-1309"/>
     <Column Name="BusCountry" Value="United States"/>
   </MemberInformation>
   <MemberInformation Constituent_Id="0000286358">
     <Column Name="First_name" Value="Dave"/>
     <Column Name="Last_name" Value="Hill"/>
     <Column Name="address_1" Value="8 Palm Street"/>
     <Column Name="address_2" Value=""/>
     <Column Name="City" Value="Orlando"/>
     <Column Name="state" Value="FL"/>
     <Column Name="Zipcode" Value="32590"/>
     <Column Name="country" Value="United States"/>
     <Column Name="BusStreet1" Value="8 Summit Blvd."/>
     <Column Name="BusStreet2" Value=""/>
     <Column Name="BusCity" Value="Orlando"/>
     <Column Name="BusState" Value="FL"/>
     <Column Name="BusZip" Value="32810"/>
     <Column Name="BusCountry" Value="United States"/>
   </MemberInformation>
  </Update>
 </soap:Body>
</soap:Envelope>

Update response

Update Response
 <soap:Body>
  <UpdateResponse xmlns="http://imodules.com/WebServices/GeneralQuery/">
   <UpdateResult>
    <UpdateMemberResult Constituent_Id="SS1234" Is_New="false">
     <UpdateColumnResult Name="FIRST_NAME" Success="true">
      <Message Code="2207" Description="The column FIRST_NAME already contains the specified update value."/>
     </UpdateColumnResult>
     <UpdateColumnResult Name="LAST_NAME" Success="true">
      <Message Code="2207" Description="The column LAST_NAME already contains the specified update value."/>
     </UpdateColumnResult>
     <UpdateColumnResult Name="PREF_EMAIL" Success="true">
     </UpdateColumnResult>
    </UpdateMemberResult>
   </UpdateResult>
  </UpdateResponse>
 </soap:Body>
</soap:Envelope>

GetMembersChangedDuring

GetMemberChagedDuring
<ArrayOfMemberInformation>
 <MemberInformation Constituent_Id="92053" Last_Updated="2010-05-19T13:35:40">
  <Column Name="First_Name" Value="Jeffrey"/>
  <Column Name="Last_Name" Value="Rohr"/>
  <Column Name="birth_date" Value="2010-05-20T00:00:00"/>
  <Column Name="Email" Value="jrohr@imodules.com"/>
  <Column Name="date_added" Value="2003-05-29T10:21:20"/>
 </MemberInformation>
<MemberInformation Constituent_Id="573" Last_Updated="2010-05-21T14:21:19" Last_Updated_By_Constituent_Id="92053" Last_Updated_By_Name="Jeffrey Rohr">
  <Column Name="First_Name" Value="John"/>
  <Column Name="Last_Name" Value="Jones"/>
  <Column Name="birth_date" Value=""/>
  <Column Name="Email" Value="AnthonyJones@overlandstate.imodules.com"/>
  <Column Name="date_added" Value="2008-12-30T16:12:44"/>
 </MemberInformation>
 <MemberInformation Constituent_Id="52389" Last_Updated="2010-01-10T00:09:23">
  <Column Name="First_Name" Value="Paula"/>
  <Column Name="Last_Name" Value="Abdul"/>
  <Column Name="birth_date" Value="1969-03-17T00:00:00"/>
  <Column Name="Email" Value="test@test.com"/>
  <Column Name="date_added" Value="2009-07-13T00:06:06"/>
 </MemberInformation>
 <MemberInformation Constituent_Id="ABC12" Last_Updated="2010-01-05T16:49:07">
  <Column Name="First_Name" Value="Bill"/> <Column Name="Last_Name" Value="Cosby"/>
  <Column Name="birth_date" Value="1949-05-10T00:00:00"/>
  <Column Name="Email" Value="test@test.com"/>
  <Column Name="date_added" Value="1900-01-01T00:00:00"/>
 </MemberInformation>
</ArrayOfMemberInformation>

ControlQuery

  • Event/Campaign/Form Updates | Control fields (instance fields and/or fields that are specific to an Event or Campaign) are only accessible through Control methods (web service methods defined within the ControlQuery web service). Control ControlQuery methods require that the control ID relating to the Form, Event or Campaign be specified. The fields available to these methods are limited to the fields relating to the specified control ID. At this time, Recurring Transactions will not show in the ControlQuery results. Only the first payment.

    • GetAllColumns – returns all Control fields available for the specified control. These are the fields available to query on or update when accessing Control methods.
    • GetAllControls – returns all controls available including the ID, name, type (i.e. form, event or campaign), the group id of the community the form was created in, the last time the structure of the form was changed, and the last submission the form received. These are the control ID used when accessing Control methods.
    • GetControlSettings – returns all details/attributes for the specified control.
    • GetMembersChangedDuring – returns all constituents records that have been changed within the specified timeframe for the specified control.
    • GetMembersChangedSince – returns all constituent records that have been changed since the specified start date through the present time for the specified control.
    • GetOneMember – returns the specified fields for the member matching the specified Constituent ID and specified control.
    • GetOneMemberByMemberId – returns the specified fields for the member matching the iModules member id.
    • GetSelectedControls – Get an array of controls matching the specified control type.
    • Update – allows fields to be updated and rows to be added for the specified control. This method is only available when using the SOAP protocol due to the complex nature of the parameters this method requires.
    • UpdateKeepChanged – allows fields to be updated and rows to be added for the specified control. This method is only available when using the SOAP protocol due to the complex nature of the parameters this method requires. UpdateKeepChanged provides the ability to avoid overwriting fields that have been updated online over a certain period of time.

Control Query Samples

GetMembersChangedDuring Response 

GetMembersChangedDuring Response
<MemberInformation Constituent_Id="2695">
 <Column Name="First_Name" Value="Katie" />
 <Column Name="Last_Name" Value="Hudson" />
   <Instances>
   <Instance Instance_Id="6265fcd4-d912-405f-b142-0c328b3bd8c5">
  <Column Name="TheOverlandStateCollegeCapitalFund- TheOverlandStateCollegeCapitalFundLevels" Value=".591." />
  <Column Name="TheOverlandStateCollegeCapitalFund- TheOverlandStateCollegeCapitalFundDesignations">
    <Designations>
     <Designation ID="587" Amount="250" Text="Student Services Fund" Value="Student Services Fund" />
     <Designation ID="586" Amount="250" Text="The Library Fund" Value="The Library Fund" />
    </Designations>
   </Column>
   <Transactions>
    <Transaction Transaction_Id="7" IsSuccess="true">
     <Column Name="amount" Value="500.0000" />
     <Column Name="purchasedate" Value="2009-02-11T08:54:34" />
     <Column Name="authorizationcode" Value="Skipped billing - not applicable" />
     <Column Name="billingname" Value="Katie Hudson" />
     <Column Name="creditcardtype" Value="N/A" />
     <Column Name="lastfourdigits" Value="1111" />
     <Column Name="billingemail" Value="khudson@imodules.com" />
     <Column Name="billingstreet1" Value="Skipped billing - not applicable" />
     <Column Name="billingstreet2" Value="Skipped billing - not applicable" />
     <Column Name="billingcity" Value="Skipped billing - not applicable" />
     <Column Name="billingstate" Value="N/A" />
     <Column Name="BillingZip" Value="N/A" />
     <Column Name="billingcountry" Value="Skipped billing - not applicable" />
     <Column Name="PaymentType" Value="OT" />
    </Transaction>
   </Transactions>
  </Instance>
 </Instances>
</MemberInformation>

GetMembersChangedDuring Response w/ Recurring Transaction

GetMemersChangedDuring Response with Recurring Transaction
<MemberInformation Constituent_Id="12345">
 <Column Name="Email Address" Value="test@test.com" />
 <Column Name="First Name" Value="Charlie" />
 <Column Name="Last Name" Value="Murphy" />
  <Instances>
   <Instance Instance_Id="78dad999-b9aa-9999-9de0-af284730f999">
    <Column Name="Library_Endowment" Value="1200.0000" />
    <Transactions>
     <Transaction Transaction_Id="1090" IsSuccess="true">
      <Column Name="amount" Value="100.0000" />
      <Column Name="purchasedate" Value="2009-12-07T17:03:26" />
      <Column Name="authorizationcode" Value="00999A" />
      <Column Name="billingname" Value="Charlie Murphy" />
      <Column Name="creditcardtype" Value="VISA" />
      <Column Name="lastfourdigits" Value="1234" />
      <Column Name="billingemail" Value="test@test.com" />
      <Column Name="billingstreet1" Value="1010 Main St." />
      <Column Name="billingcity" Value="Overland Park" />
      <Column Name="billingstate" Value="KS" />
      <Column Name="BillingZip" Value="66213" />
      <Column Name="billingcountry" Value="US" />
      <Column Name="PaymentType" Value="RT" />
      <Column Name="paymentfrequency" Value="12" />
      <Column Name="totalscheduledamount" Value="1200.0000" />
      <Column Name="nextpaymentamount" Value="100.0000" />
      <Column Name="nextpaymentdate" Value="2010-01-07T17:03:26" />
     </Transaction>
    </Transactions>
   </Instance>
  </Instances>
 </MemberInformation>

Subsequent recurring transactions will then be available for retrieval (In our example, there would be 11 more transactions like the one below, 1 per month). Any additional transactions will show in the transactions node. Querying a date range that includes any of the transaction dates will return the entire record and all transactions that have been processed. Items in blue will be unique to that transaction.

<MemberInformation Constituent_Id="12345">
 <Column Name="Email Address" Value="test@test.com" />
 <Column Name="First Name" Value="Charlie" />
 <Column Name="Last Name" Value="Murphy" />
  <Instances>
   <Instance Instance_Id="78dad999-b9aa-9999-9de0-af284730f999">
    <Column Name="Library_Endowment" Value="1200.0000" />
    <Transactions>
     <Transaction Transaction_Id="1090" IsSuccess="true">
      <Column Name="amount" Value="100.0000" />
      <Column Name="purchasedate" Value="2009-12-07T17:03:26" />
      <Column Name="authorizationcode" Value="00999A" />
      <Column Name="billingname" Value="Charlie Murphy" />
      <Column Name="creditcardtype" Value="VISA" />
      <Column Name="lastfourdigits" Value="1234" />
      <Column Name="billingemail" Value="test@test.com" />
      <Column Name="billingstreet1" Value="1010 Main St." />
      <Column Name="billingcity" Value="Overland Park" />
      <Column Name="billingstate" Value="KS" />
      <Column Name="BillingZip" Value="66213" />
      <Column Name="billingcountry" Value="US" />
      <Column Name="PaymentType" Value="RT" />
      <Column Name="paymentfrequency" Value="12" />
      <Column Name="totalscheduledamount" Value="1200.0000" />
      <Column Name="nextpaymentamount" Value="100.0000" />
      <Column Name="nextpaymentdate" Value="2010-01-07T17:03:26" />
     </Transaction>
     <Transaction Transaction_Id="11240" IsSuccess="true">
      <Column Name="amount" Value="100.0000" />
      <Column Name="purchasedate" Value="2009-12-07T17:03:26" />
      <Column Name="authorizationcode" Value="00999A" />
      <Column Name="billingname" Value="Charlie Murphy" />
      <Column Name="creditcardtype" Value="VISA" />
      <Column Name="lastfourdigits" Value="1234" />
      <Column Name="billingemail" Value="test@test.com" />
      <Column Name="billingstreet1" Value="1010 Main St." />
      <Column Name="billingcity" Value="Overland Park" />
      <Column Name="billingstate" Value="KS" />
      <Column Name="BillingZip" Value="66213" />
      <Column Name="billingcountry" Value="US" />
      <Column Name="PaymentType" Value="RT" />
      <Column Name="paymentfrequency" Value="12" />
      <Column Name="totalscheduledamount" Value="1200.0000" />
      <Column Name="nextpaymentamount" Value="100.0000" />
      <Column Name="nextpaymentdate" Value="2010-01-07T17:03:26" />
     </Transaction>
    </Transactions>
   </Instance>
  </Instances>
 </MemberInformation>

TransactionsQuery

  • Reconciliation Reporting | Transaction Fields (instance fields that are specific to a commerce transaction) are available through either the Control Methods or the Transaction Methods. For the control methods, only transactions relating to that control are returned. For the Transaction methods where there is not a control id, TransactionsQuery then all transactions matching the input criteria are returned. Only transactions are returned in the Transaction Methods. If you need other fields along with the transactions then the Control Methods should be used. Accessing a Control method and specifying a control ID of “0” is the same as accessing a General method.

    • GetOneMember - This allows for simple export of a constituent’s transaction history; particularly useful when working with recurring transactions.
    • GetOneMemberByMemberId - Returns all transactions for the member matching the specified iModules Member ID.
    • GetTransactionsAllBetween – Returns all transactions within the specified timeframe.
    • GetTransactionsAllSince – Returns all transactions since the date specified.
    • GetTransactionsByControl – Returns all transactions for a control.
    • GetTransactionsByControlBetween – Returns all transactions for a control within the specified timeframe.
    • GetTransactionsByControlSince – Returns all transactions for a control since the date specified.
    • GetUnreviewedTransactionsAllBetween – Allows pulling transactions out of iModules immediately without the use of the non-member merge or ICP systems. See the Gift Integration section for more information.

Transactions Query Samples

Successful One-time Transaction w/ Ledger Code 

Successful One-time Transactions with Ledger Code
<Transaction Transaction_Id="4" IsSuccess="true">
 <Column Name="amount" Value="500.0000" />
 <Column Name="purchasedate" Value="2009-02-09T16:12:27" />
 <Column Name="authorizationcode" Value="402825" />
 <Column Name="billingname" Value="James C Smith" />
 <Column Name="creditcardtype" Value="VISA" />
 <Column Name="lastfourdigits" Value="5336" />
 <Column Name="billingemail" Value="james@test.com" />
 <Column Name="billingstreet1" Value="1010 Main" />
 <Column Name="billingcity" Value="Boston" />
 <Column Name="billingstate" Value="MA" />
 <Column Name="BillingZip" Value="12345" />
 <Column Name="billingcountry" Value="US" />
 <Column Name="PaymentType" Value="OT" />
 <LedgerValues>
  <LedgerValue Name="Sample GL Code" Value="A001532" />
 </LedgerValues>
 <Column Name="Instance_Id" Value="3ef156d2-292f-4ca4-817a-83b68aa2b763" />
 <Column Name="Control_Id" Value="856" />
 <Column Name="Control_Type" Value="campaign" />
 <Column Name="Control_Name" Value="The OSU Capital Campaign" />
 <Column Name="Constituent_Id" Value="2680" />
 <Column Name="imod_member_id" Value="15" />
</Transaction>

Successful One-time Transaction. If the user has a Constituent_Id (usually meaning they are logged in using their primary constituent record) it will display in any response from the TransactionQuery:

<Transaction Transaction_Id="12476" IsSuccess="true">
 <Column Name="Control_Id" Value="1119" />
 <Column Name="Control_Type" Value="campaign" />
 <Column Name="Control_Name" Value="Contributions" />
 <Column Name="amount" Value="5.0000" />
 <Column Name="purchasedate" Value="2009-10-01T07:54:00" />
 <Column Name="authorizationcode" Value="402825" />
 <Column Name="billingname" Value="James C Smith" />
 <Column Name="creditcardtype" Value="VISA" />
 <Column Name="lastfourdigits" Value="5336" />
 <Column Name="billingemail" Value="james@test.com" />
 <Column Name="billingstreet1" Value="1010 Main" />
 <Column Name="billingcity" Value="Boston" />
 <Column Name="billingstate" Value="MA" />
 <Column Name="BillingZip" Value="12345" />
 <Column Name="billingcountry" Value="US" />
 <Column Name="PaymentType" Value="OT" />
 <Column Name="Instance_Id" Value="f09c8ea3-4fc0-40c0-b9b8-36df312ec5db" />
 <Column Name="Constituent_Id" Value="90343729" />
</Transaction>


Successful Recurring Transaction:

Successful Recurring Transaction
<Transaction Transaction_Id="12487" IsSuccess="true">
 <Column Name="Control_Id" Value="1119" />
 <Column Name="Control_Type" Value="campaign" />
 <Column Name="Control_Name" Value="Contributions" />
 <Column Name="amount" Value="2100.0000" />
 <Column Name="purchasedate" Value="2009-10-01T12:40:58" />
 <Column Name="authorizationcode" Value="07842T" />
 <Column Name="billingname" Value="James Smith" />
 <Column Name="creditcardtype" Value="MC" />
 <Column Name="lastfourdigits" Value="7744" />
 <Column Name="billingemail" Value="test@yahoo.com" />
 <Column Name="billingstreet1" Value="1010 Main St." />
 <Column Name="billingcity" Value="Elizabethtown" />
 <Column Name="billingstate" Value="NJ" />
 <Column Name="BillingZip" Value="03429" />
 <Column Name="billingcountry" Value="US" />
 <Column Name="PaymentType" Value="RT" />
 <Column Name="paymentfrequency" Value="12" />
 <Column Name="totalscheduledamount" Value="2100.0000" />
 <Column Name="nextpaymentamount" Value="161.5400" />
 <Column Name="nextpaymentdate" Value="2009-11-15T12:48:16" />
 <Column Name="Instance_Id" Value="a6fc3241-343f-49ad-baa9-52311d186a94" />
</Transaction>

Successful One-time Transaction with Skipped Billing (check payment through admin, etc.):

Successful One-time Transaction with Skipped Billing
<Transaction Transaction_Id="14" IsSuccess="true">
 <Column Name="Control_Id" Value="854" />
 <Column Name="Control_Type" Value="campaign" />
 <Column Name="Control_Name" Value="The Campaign for Overland State University" />
 <Column Name="amount" Value="500.0000" />
 <Column Name="purchasedate" Value="2009-11-06T14:10:10" />
 <Column Name="authorizationcode" Value="Skipped billing - not applicable" />
 <Column Name="billingname" Value="John Euston" />
 <Column Name="creditcardtype" Value="N/A" />
 <Column Name="lastfourdigits" Value="1111" />
 <Column Name="billingemail" Value="jeuston@imodules.com" />
 <Column Name="billingstreet1" Value="Skipped billing - not applicable" />
 <Column Name="billingstreet2" Value="Skipped billing - not applicable" />
 <Column Name="billingcity" Value="Skipped billing - not applicable" />
 <Column Name="billingstate" Value="N/A" /> <Column Name="BillingZip" Value="N/A" />
 <Column Name="billingcountry" Value="Skipped billing - not applicable" />
 <Column Name="PaymentType" Value="OT" />
 <Column Name="Instance_Id" Value="7d4368ce-bd0e-4819-93e0-545a0b49d91d" />
 <Column Name="Constituent_Id" Value="00543" />
</Transaction>

Failed Transaction (Billing information is not returned):

Failed Transactions
<Transaction IsSuccess="false">
 <Column Name="Control_Id" Value="4100" />
 <Column Name="Control_Type" Value="event" />
 <Column Name="Control_Name" Value="Reunion 2009" />
 <Column Name="amount" Value="86.0000" />
 <Column Name="purchasedate" Value="2009-10-05T08:19:08" />
 <Column Name="Instance_Id" Value="2bbcdc4a-a663-4f56-a338-aab3d3e9c91b" />
</Transaction>

 EmailCategoryQuery

    • GetAllCategories – Returns all categories for all communities.
    • GetCategoriesByCommunity – Returns all categories within a specific community.
    • GetMembersByCategory – Get all members that are opted out of or have opted back in to a specific category.
    • GetMembersByCommunity – Get all members that are opted out of or have opted back in to of a specific community.
    • GetMembersChangedDuring – Get all members have opted out of or have opted back in to an email category within a specific date range.
    • GetMembersChangedSince – Get all members that have opted out of or have opted back in to after a specific date.
    • GetOneMember – Get all all opt-outs or re-opt-ins for a specific member matching the specified Constituent ID.
    • GetOneMemberByMemberId – Get all opt-outs or re-opt-ins for a specific member matching the specified iModules Member ID.
    • Update – Allows ability to opt-out or re-opt-in members.  Note that opting members back into an email category is only available for clients with a private email sending IP address. This method is only available when using the SOAP protocol due to the complex nature of the parameters this method requires.

LoginQuery

    • ValidateCredentials – Tests credentials against the system and either returns an error code or a token.
    • ValidateConstituentId – Locates account by Constituent Id, vets it, and returns an error code or a token.

 

ValidateCredentials Method 

ValidateCredentials Method
<?xml version="1.0" encoding="utf-8" ?>
<SimpleSingleSignOn sharedSecret="D7BEC59EAF584027B3573EAF" algorithm="TripleDES" cipherMode="ECB" encryptedPayloadQSKey="Payload" paddingMode="ISO10126" reversedTimeoutSeconds="36000">
 <TargetCollection>
  <Target name="ceosoftcenters" appendGid="1">
   <MemberFieldsCollection>
    <MemberField alias="muid" />
   </MemberFieldsCollection>
  </Target>
 </TargetCollection>
</SimpleSingleSignOn>

They can then hit this webmethod with their API key and password to post the information below.

Post Data

 

The following information is posted to the webmethod:

    • API key (string)
    • API password (string)
    • Constituent username (string)
    • Constituent password (string)
    • Group ID (integer)

Return Values

Success will return the following example: 

Success Return
<ValidateCredentialsResults>
 <LoginResult Success="true" Constituent_Id="12345" Imod_Member_Id="100">
  <Token>v+1/x5SaNVyjWquWpt9xGErvijMTm5r5sjoxO/v2SK9VyuPQ6/apspqgz0gVTt5VCqjTxAeXoNG4C9rMMpG JKj3D+VpMAWDE</Token>
 </LoginResult>
</ValidateCredentialsResults>

 

The token can be used to login to their site (substitute their domain):

http://imodgreen.imodules.com/controls/login/SsoProxy.ashx?Payload=v +1/x5SaNVyjWquWpt9xGErvijMTm5r5sjoxO/v2SK9VyuPQ6/apspqgz0gVTt5VCqjTxAeXoNG4C9rMMpG JKj3D+VpMAWDE

Failure will return the following example:

Failure Return
<ValidateCredentialsResults>
 <LoginResult Success="false" Constituent_Id="" Imod_Member_Id="0">
  <AuthenticationError Code="113"/>
  <AuthenticationError Code="110" Description="We were unable to authenticate you with the information you provided below.  Please re-check your information and try again."/>
 </LoginResult>
</ValidateCredentialsResults>

Login Query Error Codes

Enumeration Value Verbiage Notes
BindForSearch 100    

LDAP could not find the CN OR; LDAP service account credentials are invalid OR; LDAP does not permit anonymous binding OR; LDAP requires SSL for initial connect OR; LDAP does not support SSL for initial connect

BindForAuthentication 101   LDAP invalid password for CN OR; LDAP requires SSL for authentication
NoEncompassMatch 102   Whatever they use for lookup (LDAP, CAS) there was no match in our database for the account on the authentication provider's end
NetworkError 103 Mapped ReturnCode in SsoStackProviderConfiguration.config OR; "Error calling graph." for OpenAuth In the case of calling a third-party authentication and we timeout or 404
TempLogin 104 [TEMP_LOGIN_FAIL]  
HadReadTerms 105 [TEMP_LOGIN_FAIL_HAS_READ_TERMS]  
Duplicate 106 [LOGIN_FAIL_MULTIPLE_ACCOUNTS]  
Locked 107 [Login_Account_Locked]  
NotInGroup 108 [Login_No_Group_Access] [[Community_Name]] token resolution supported!
InvalidPassword 109 [LOGIN_FAIL]  
InvalidAccount 110 [LOGIN_FAIL]  
NoResponseRedirect 111 [LOGIN_NO_REDIRECT] This is for CAS from a WS call, for example
TokenNotSupported 112 "General SSSO configuration error" Generic Simple Single Sign-on configuration problem
NoWsCmsOnlyAdmin 113   CMS-only administrators unsupported through WS
WsLatestSecurity 114   latest_security notification tailored for WS
WsPasswordExpired 115  

password_expires_soon notification tailored for WS

OpenIdCancelled 116 [LOGIN_OPENID_CANCELLED]  
OpenIdFailed 117 [LOGIN_OPENID_FAILED]  
OpenIdUnknownResponse 118 [LOGIN_OPENID_FAILED]  
OpenAuthAccessToken 119 "Error getting access token."  
FacebookGraph 120 "Unable to access Facebook Graph."  

 

MemberMergeQuery

    • InsertMemberMerge – Inserts a Member Merge mapping record that will be ran with the nightly MemberMergeTool run. This performs the backend merge of associated gift transactions, event registrations, etc. This does not include the fields updated in the Identity Checkpoint Member Merge grid. If an update of biographical fields is needed, this can be done via the GeneralQuery's Update method.

ContentQuery

    • GetAllEventContentTypes – Returns all Event Listing / Calendars for the site, regardless of community.
    • GetAllEvents – Returns all Events for the site, regardless of community, specified by a given date range. Note that this has no dependence on a ControlId, which is a limitation of ControlQuery/GetControlSettings.
    • GetCommunityEventContentTypes - Returns all Event Listing / Calendars for a specified community.
    • GetCommunityEvents - Returns all Events for a specified community, specified by a given date range. Note that this has no dependence on a ControlId, which is a limitation of ControlQuery/GetControlSettings.

 

Parameters

All web services share the following two required parameters:

  • login – part of the credentials required to authenticate the request. This is provided by IModules.
  • password - part of the credentials required to authenticate the request. This is provided by IModules.

What follows is a list of all remaining possible parameters. Many of these are shared between different methods.

  • baseMemberId – Used in the MemberMergeQuery to specify the iModules constituent identifier that another account will be merged into.
  • categoryId – used by EmailCategoryQuery to specify the email category’s identifier
  • communityId – iModules sub-community or group identifier. Same as groupId
  • controlId – specifies the form, event or campaign for the request. Applicable only for Control methods.
  • columns – a comma-separated list of field names that will always be returned.
  • changedColumns – a comma-separated list of field names that will be returned only when they have been changed within the specified timeframe.
  • constituentId – the identifier of the user to return.
  • constituentLogin – used in LoginQuery to pass the constituent’s primary login key (email, username)
  • constituentPassword - used in LoginQuery to pass the constituent’s password
  • changedFrom – the start date for the timeframe.
  • changedTo – the end date for the timeframe.
  • changeSince – the start date for the timeframe.
  • endDate – the end date for the timeframe.
  • filter – allows filtering of rows based on field name, operators and criteria (see Filters).
  • groupId – iModules sub-community or group identifier. Same as communityId
  • includeNonMembers – specifies whether or not to include constituents records that are not marked as members of the community.
  • includeBlankIds – specifies whether or not to include constituents records that do not have a constituent ID populated.
  • includeFailedTransactions – include transactions that did not result in success
  • includeTransactions – include the Transactions special element in the output (implicitly true for TransactionsQuery)
  • includeTransactionDetails – include the TransactionItems special element in the output (ignored if includeTransactions is false)
  • includeUnreviewed – specified whether or not to include constituent records that are pending a member or Identity Checkpoint merge
  • keepChangedFrom – the start date for the timeframe of which to not overwrite updates that have been made online.
  • keepChangedTo – the end date for the timeframe of which to not overwrite updates that have been made online.
  • mergeMemberId – Used in MemberMergeQuery to specify the iModules constituent identifier that will be merged into the “base” member id.
  • memberInformation – a collection of information in XML format containing identifiers and fields (see MemberInformation in Parameters).
  • memberId – iModules unique identifier of the user. Used by many web services to get information, and also used to assign an external Constituent_ID to a non-member record in iModules.
  • startDate – the start date for the timeframe.

 

Special Elements

MemberInformation Element

(General & Control Queries) Each record returned or updated in a Web Service request is represented by a MemberInformation element. The MemberInformation type contains additional attributes to distinguish updates made by the administrator. MemberInformation is the response type for the GetOneMember, GetMembersChangedDuring, and GetMembersChangedSince web service methods. It is also part of the request for the Update method.

The MemberInformation Element:

    • May contain one or more Column elements representing the non-instance fields specified in the request or the non-instance columns to update.
    • May contain one or more Instance elements.
    • Will contain a Constituent_Id attribute containing the constituent ID (primary key).
    • Will contain a Last_Updated attribute containing the date the constituent record was last updated if the record has been updated.
      • This will only be excluded for the GetOneMember method. All other methods require that the constituent record has been updated in order to be included in the result.
      • This attribute may be passed to the Update method, but will not be updated on the constituent record. It is effectively read-only.
    • Will contain a Last_Updated_By_Constituent_Id attribute if the record has been updated.
      • This attribute contains the constituent id of the constituent/administrator who made the update (if they have a constituent id).
      • This attribute may be passed to the Update method, but will not be updated on the constituent record. It is effectively read-only.
    • May contain a Last_Updated_By_Name attribute if the record has been updated.
      • This attribute contains the full name (i.e. first name + ' ' + last name) of the constituent/ administrator who made the update (if they have a first and last name).
      • This attribute may be passed to the Update method, but will not be updated on the constituent record. It is effectively read-only.

The following is a sample of an array of MemberInformation elements returned in a response:

Memberinformation elements returned in a response
<ArrayOfMemberInformation>
 <MemberInformation Constituent_Id="0000011111" Last_Updated="2010-05-06T16:34:22" Last_Updated_By_Constituent_Id="841982" Last_Updated_By_Name="Amy Admin">
  <Column Name="first_name" Value="Jeff"/>
  <Column Name="last_name" Value="Smith"/>
 </MemberInformation
 <MemberInformation Constituent_Id="0000099999">
  <Column Name="first_name" Value="Jenny"/>
  <Column Name="last_name" Value="Smith"/>
 </MemberInformation
</ArrayOfMemberInformation>

*NOTE: The iModules web services will return an empty string value as opposed to excluding the node for a column when the clearing of data occurs. Fields included in changedColumns will still be returned if updated and not returned if untouched in the online database for the specified time period. The example below shows a constituent that has cleared their "address_2" field:

<ArrayOfMemberInformation>
 <MemberInformation Constituent_Id="000000001">
  <Column Name="address_2" Value=""/>
 </MemberInformation>
</ArrayOfMemberInformation>

Instance Element

    • Will contain an Instance_ID containing the instance ID. The Instance_ID attribute is optional for the Update web service method (see External Row Identifier).
    • May contain one or more Column elements representing the instance columns in the request or the instance columns to update.
    • May contain one or more Transaction elements representing a commerce transaction.

Transaction Element

    • May contain a “Transaction_Id” attribute containing the transaction ID. If this attribute is missing and the IsSuccess attribute is “true”, then it was a transaction processed with Skip Billing.
    • Will contain one IsSuccess attribute containing “True” or “False” to indicate if the transaction was successful or not.
    • May contain one or more Column elements containing the transaction data.
    • Will contain an “isReviewed” Boolean attribute, whose purpose is to let administrators know when records have gone thru the merge process to be pulled offline. See “Reviewed Attribute” for more information.
    • Will contain a “transaction_last_updated” column, which is a datetime field initially set to the transaction “purchasedate.” This field will then be updated on various scenarios. See “Transaction last Updated Attribute” for more information.

TransactionItem Element

    • Will contain one Type attribute containing either "CommerceItem" or "CommerceAmount"
    • Will contain one Transaction_Item_Id attribute containing the primary key of the commerce item or donation driver, prepended with 'Item-' or 'Amount-' respectively
    • Will contain one or more Column elements containing the transaction item data.
      • CommerceItems will contain a "total" and "quantity" column
      • CommerceAmounts will contain a "total" column
      • CommerceItems and CommerceAmounts will only return a "sku" column if the sku contains a real value

Column Element

    • Will contain a Name attribute containing the name of the field.
    • Will contain a Value attribute containing the value of the field for the containing member or instance.

 

Gift Integration with Identity Checkpoint and Member Merge Systems

Enhancements have been made to the iModules Web Services that are important to the success of gift integration. Recently, systems have been deployed to address the unauthenticated transactions in Encompass, which are also called non-member transactions. The Web Services were modified to support both the iModules Non-Member Merge, a nightly process that coalesces non-member accounts, and the iModules Identity Checkpoint system, an administrative tool that works to recognize constituent accounts on the front end (in the transaction form), suggest a match to the user, and then queue that transaction up for review by an administrator for association with the official constituent record.

Reviewed Element

Modifications have been completed to ensure that only “reviewed” transactions are returned (which are transactions that are not in limbo in the Non-member or Identity Checkpoint processes) in the Web Services and to also provide a new transaction date attribute or “transactionlastupdated” that marks when a transaction may have been updated by either of the two processes.

The main Web Services currently being used for gift exchange are the TransactionsQuery’s GetTransactionsAllBetween and GetTransactionsAllSince methods. Due to recent enhancements, no adjustments will need to be made to the parameters that are passed to these methods in order to receive “reviewed” records. This will be true for all rows returned by these methods. To get unreviewed transactions, you must call a separate method called “GetUnreviewsTransactionsAllBetween.”

This field will be set to TRUE when the following occurs:

1. Authenticated User - Is immediately set based on having a Constituent_ID

    • Non-Member with Identity Checkpoint turned off
    • Meets the following criteria:
    • Identity Checkpoint is turned off
    • Record has been through the Non-member merge process

2. Identity Checkpoint - Match made in the Member Merge Grid

    • Has been through Non-member merge process
    • Went to the Identity Checkpoint Member Merge grid for potential matching
    • Match was approved by administrator
    • Nightly Member Merge process has occurred

3. Identity Checkpoint - Non-Match made in the Member Merge Grid

    • Has been through Non-member merge process
    • Went to the Identity Checkpoint Member Merge grid for potential matching
    • Match was declined by administrator

4. Identity Checkpoint - Non-Match (record never makes the Member Merge Grid based on match settings)

    • Has been through Non-member merge process
    • Did not make the Member Merge Grid (based on admin match settings)

 

Transaction Last Updated Element

In order to ensure that a record is not pulled prior to review, the GetTransactionsAllBetween and GetTransactionsAllSince date parameters of “startDate” and “endDate” now pull based on the new “transactionlastupdated” timestamp, not based on “purchasedate”. The “transactionlastupdated” is updated upon the different review/merge steps that occur during the Non-Member Merge and Identity Checkpoint systems and will ultimately reflect the time that the record was marked as IsReviewed=”true”. Initially set to the transaction "purchasedate," the “transactionlastupdated” field will then be updated in the following scenarios:

    1. Merge Tools
    2. For clients with Identity Checkpoint turned off, it will be updated to the current datetime at runtime of the Non-member Merge application to be included in changed records.
    3. For clients with Identity Checkpoint turned on, it will be updated to the current datetime when the following occurs:
      1. Records that are sent to the Identity Checkpoint Member Merge grid and APPROVED FOR MATCH are updated at runtime of the Identity Checkpoint Member Merge application to be included in changed records.
      2. Records that are sent to the Identity Checkpoint member merge grid and DECLINED FOR MATCH are updated at the time of the administrator Identity Checkpoint decline to be included in changed records.
      3. Records that are NOT SENT TO IDENTITY CHECKPOINT member merge grid based on administrator match settings are updated at time the application excludes the record from making the Identity Checkpoint Member Merge grid to be included in changed records.
    4. When the MemberMerge Web Service method is used (allows for external non-grid Identity Checkpoint Merge Requests, mentioned above).

 

Example 

"IsReviewed" attribute and 'transactionlastupdated" column
<Transaction Transaction_Id="4669" IsSuccess="true" IsReviewed="true">
 <Column Name="amount" Value="20.8300"/>
 <Column Name="purchasedate" Value="2010-05-01T02:36:36"/>
 <Column Name="authorizationcode" Value="08331C"/>
 <Column Name="custtransnum" Value="340dfa8f7d2745f50"/>
 <Column Name="retrievalcode" Value="VUJE5A9ABF77"/>
 <Column Name="appealcode" Value=""/>
 <Column Name="billingname" Value="Bill Crow"/>
 <Column Name="creditcardtype" Value="VISA"/>
 <Column Name="lastfourdigits" Value=""/>
 <Column Name="achbankname" Value=""/>
 <Column Name="achbankstate" Value=""/>
 <Column Name="achaccountnumlast2" Value=""/>
 <Column Name="achroutingnumlast2" Value=""/>
 <Column Name="achchecknum" Value=""/>
 <Column Name="achaccounttype" Value=""/>
 <Column Name="billingemail" Value="crowley@yahoo.com"/>
 <Column Name="billingphone" Value="6315555555"/>
 <Column Name="billingstreet1" Value="90 Lake Lane"/>
 <Column Name="billingstreet2" Value=""/>
 <Column Name="billingcity" Value="Kings Park"/>
 <Column Name="billingstate" Value="NY"/>
 <Column Name="billingzip" Value="11754-3923"/>
 <Column Name="billingcountry" Value="US"/>
 <Column Name="paymenttype" Value="RT"/>
 <Column Name="paymentfrequency" Value="12"/>
 <Column Name="totalscheduledamount" Value="250.0000"/>
 <Column Name="nextpaymentamount" Value="20.8300"/>
 <Column Name="nextpaymentdate" Value="2010-09-01T12:03:31"/>
 <Column Name="paymentsremaining" Value="7"/>
 <Column Name="initialtransactionid" Value="4560"/>
 <Column Name="fromfacebook" Value="False"/>
 <Column Name="transactionlastupdated" Value="2010-05-04T02:36:36"/>
 <Column Name="instance_id" Value="a1c1e1bf-db32-49b5-baad-fc11b78f81df"/>
 <Column Name="control_id" Value="1362"/>
 <Column Name="control_type" Value="campaign"/>
 <Column Name="control_name" Value="Niagara Fund 2009-2010 (no fb pub)"/>
 <Column Name="constituent_id" Value="12345"/>
 <Column Name="imod_member_id" Value="56449"/>
</Transaction>

Matched and Unmatched Records in iModules

Records Matched in iModules

Records with a constituent_id will have been authenticated or matched using Identity Checkpoint. These records should flow into your offline database without any further processes taking place (other than administrative review if necessary).

Records Unmatched in iModules

There will continue to be transactions that come through that are not associated with a constituent account – the Identity Checkpoint process is not going to catch all of the potential constituent matches. In order to ensure that duplicates are not created in iModules and if these records are ever expected to be part of the biographical sync from your offline database to iModules, there are three (3) Non-Member scenarios to ensure success:

1. Match is found outside of iModules and the Constituent_ID of the record exists in iModules.

If a match is found outside of iModules and the gift record is then assigned to a constituent record that is present in iModules (a check should be done to confirm this), the iModules MemberMerge Query should be used to apply the same behavior on the iModules end. The MemberMerge Query requires the iModules member_id of the official constituent record and the member_id of the non-member record. This API allows the gift associated with the non-member record to be moved under the official member record.

2. Match is found outside of iModules and the Constituent_ID of the record does not exist in iModules

So that duplicates are not created in iModules, these records will need their Constituent_ID updated in iModules with the value of the matched record in the offline database prior to the biographical sync taking place. Updates using the iMod_Member_ID as the primary key are now available in GeneralQuery’s Update method, including updating the record’s Constituent_ID value.

3. No match is found outside of iModules and the record is to be added to the offline database These non- member records should be marked with a constituent code that indicates they are non-members from iModules. Such records could be given an “iModules Non-Member” constituent code and excluded from the regular biographical sync process from the offline database to iModules.

(Same as Scenario 2) So that duplicates are not created in iModules, these records will need their Constituent_ID updated in iModules with the value of the matched record in the offline database prior to the biographical sync taking place. Updates using the iMod_Member_ID as the primary key are now available in GeneralQuery’s Update method, including updating the record’s Constituent_ID value.

In the event that an administrator decides that a non-member record in the offline database should now become an official constituent record that is synchronized with iModules, one small adjustment should be made to make sure that this record is no longer considered a non-member in iModules. A value of false for the “is_nonmember” field should be set for all records in the biographical sync going from the offline database to iModules. While the constituent code would also be held in iModules, the “is_nonmember” field handles the assignment of certain rights within the Encompass system.

Gift Transaction Flow Diagram

  

Linked Transactions

Some form types may contain embedded donations support (e.g. Events with Donations). 

For the ControlQuery, if you are querying the Event, you get the event transaction (if applicable) with the linked information for the donation transaction (if applicable).  Conversely, if you are querying the Campaign, you get the donation transaction (if applicable) with the linked information for the event transaction (if applicable).  Similarly, the TransactionQuery that specifies the Event form by Control_Id (e.g. GetTransactionsByControl) you get the event transaction (if applicable) with the linked information for the donation transaction (if applicable).   If you are calling a method that specifies the Campaign form by Control_Id (e.g. GetTransactionsByControl) you get the donation transaction (if applicable) with the linked information for the event transaction (if applicable). 

For the TransactionQuery, if you are calling a method that does not specify the form (e.g. GetTransactionsAllSince) you get both transactions.

For the ControlQuery and the TransactionQuery in order to see the linked transaction information IncludeTransactionDetails must be TRUE.

The LinkedTransaction element will be added as a child node of the Transaction element.  The syntax will be as follows:

LinkedTransaction element
<LinkedTransaction>
 <TransactionId>9597</TransactionId>
 <Amount>500.0000</Amount>
 <ControlId>4151</ControlId>
 <ControlType>campaign</ControlType>
 <ControlName>Annual Campaign</ControlName>
 <PaymentType>OT</PaymentType>
 <TotalScheduledAmount>0</TotalScheduledAmount>
</LinkedTransaction>

The 'Amount' is the initial donation amount received from the linked transaction.  For a recurring payment it would be the first payment amount.  The Payment Type can be OT (One Time), RT(Recurring), or PT(Perpetual).  The TotalScheduledAmount would be the total donation amount promised. 

If there is no linked transaction, the TransactionID, Amount and ControlId will default to '0' and the ControlType and ControlName will default to blank.

A note about free tickets on Event forms
  • If you have a $0 event with a donation, the Event Transaction Query will not show the linked donation transaction.  This mirrors what we have in the reconciliation export.
  • If you have a $0 event with a donation, the Event Control Query will not show the linked donation transaction. 
  • If you have a $0 event with a donation, the Campaign Transaction Query will not show the linked event transaction.
  • If you have a $0 event with a donation, the Campaign Control Query will not show the linked event transaction.

Return Syntax

AllColumnResults

The following is a sample of the AllColumnResults response. This applies to the GetAllColumns web service method.

AllColumnResults response
<ArrayOfAllColumnResults>
 <AllColumnResults Column="first_name" Column_Info="nvarchar,75" Instance="false"/>
 <AllColumnResults Column="last_name" Column_Info="nvarchar,75" Instance="false"/>
 <AllColumnResults Column="donation_amount" Column_Info="money" Instance="true"/>
</ ArrayOfAllColumnResults >

 Each field returned is represented by an AllColumnResults element.

AllColumnResults element

    • Will contain a Column attribute containing the name of the field.
    • Will contain a Column_Info attribute containing the data type of the field.
    • Will contain an Instance attribute indicating whether or not the field is an instance field.

 AllControlResults

The following is a sample of the AllControlResults response. This applies to the GetAllControls web service method.

AllControlResults response
<ArrayOfAllControlResults>
 <AllControlResults Control_Id="1" Control_Name="Test Form" Control_Type="form" Group_Id="1" Last_Updated="2015-01-13T14:32:42" Last_Submission="2015-02-13T08:32:21"/>
 <AllControlResults Control_Id="2" Control_Name="Test Event" Control_Type="event" Group_Id="1" Last_Updated="2015-04-04T09:15:12" Last_Submission="2016-06-14T16:00:01"/>
 <AllControlResults Control_Id="3" Control_Name="Test Campaign" Control_Type="campaign" Group_Id="1" Last_Updated="2016-01-11T12:45:43" Last_Submission="2016-04-01T14:32:53"/>
</ArrayOfAllControlResults>

  Each control returned is represented by an AllControlResults element.

AllControlResults Element

    • Will contain a Control_Id attribute containing the ID of the control.
    • Will contain a Control_Name attribute containing the name of the control.
    • Will contain a Control_Type attribute containing the type of the control (either “form”, “event”, or “campaign”).
    • Will contain a Group_Id attribute that shows the group (or sub-community) id associated with the control.

MemberInformation

See the MemberInformation section under Parameters for information on this return type.

Transactions

Transactions may be returned from the control query methods or the transactions query methods. When returned in from a control query method, the transactions will be inside the <Transactions> element of the <Instance> element. When returned from the transactions query methods you will receive an array of <Transaction> elements ordered by the last updated date of the transaction.

Array of Transactions
<ArrayOfTransactions>
 <Transaction Transaction_Id="4399" IsSuccess="true" IsReviewed="true">
  <Column Name="amount" Value="85.0000"/>
  <Column Name="purchasedate" Value="2010-01-13T14:32:42"/>
  <Column Name="authorizationcode" Value="148888"/>
  <Column Name="billingname" Value="Paul Stuart"/>
  <Column Name="creditcardtype" Value="AMEX"/>
  <Column Name="lastfourdigits" Value="2004"/>
  <Column Name="billingemail" Value="test@hotmail.com"/>
  <Column Name="billingstreet1" Value="5685 Fifth Avenue"/>
  <Column Name="billingcity" Value="New York"/>
  <Column Name="billingstate" Value="NY"/>
  <Column Name="billingzip" Value="10017"/>
  <Column Name="billingcountry" Value="US"/>
  <Column Name="paymenttype" Value="OT"/>
  <Column Name="Instance_Id" Value="d70ad7b6-62d1-477a-8042-3jr8ch3eu548"/>
  <Column Name="Control_Id" Value="4012"/>
  <Column Name="Control_Type" Value="event"/>
  <Column Name="Control_Name" Value="Homecoming Luncheon"/>
  <Column Name="imod_member_id" Value="98765"/>
 </Transaction>
</ArrayOfTransactions>

TransactionsQuery - Parameters and Response Entities

Parameters Passed:

Column

Datatype Length

Returned in

Failed Transastion

 

Description

login(GUID)

string 36 n/a Part of the credentials required to authenticate the request, provided by IModules.
password string 30 n/a Part of the credentials required to authenticate the request, provided by IModules. Unique ID that specifies the form, event, or campaign for the request. Applicable only for Control specific methods.
controlId int 0 n/a Unique ID that specifies the form, event, or campaign for the request. Applicable only for Control specific methods.
startDate dateTime 0 n/a YYYY-MM- DDThh:mm:ss
endDate dateTime 0 n/a YYYY-MM- DDThh:mm:ss
includeFailedTransactions boolean 0 n/a true/false
includeNonMembers boolean 0 n/a true/false
includeTransactionDetails boolean 0 N

true/false

includeUnreviewed boolean 0 n/a true/false
filter string n/a n/a Similar to SQL where clause, allows filtering of rows based on field name or Control_Type, operators and criteria
Control_Name string 500 Y

Example - \"Homecoming Dinner\"

Columns Returned:

Column

Datatype Length

Returned in

Failed Transastion

 

Description

TransactionId int 0 N  
IsReviewed boolean 0 N true/false
IsSuccess boolean 0 N true/false
Control_Id int 0 Y Unique ID that specifies the form, event, or campaign
Control_Type string 8 Y \"campaign\",\"event\", or \"form\"
Control_Name string 500 Y Example - \"Homecoming Dinner\"
amount money 8 Y  
purchasedate dateTime 0 Y YYYY-MM- DDThh:mm:ss
authorizationcode string 200 N will match with processor
billingname string 100 N  
creditcardtype string 4 N  
lastfourdigits int 0 N  
billingemail string 75 N  
billingstreet1 string 150 N  
billingstreet2 string 150 N  
billingcity string 150 N  
billingstate string 50 N  
billingZip string 50 N  
billingcountry string 100 N  
PaymentType string 2 N

OT - One Time transaction
RT - Recurring transaction Scheduled Payment
PT - Recurring transaction Perpetual Payment

paymentfrequency int 0 N \"1\".\"2\".\"4\", or \"12\" (does not correspond with amount of payments left)
totalscheduledamont money 8 N  
nextpaymentamount

money

8 N  
nextpaymentdate dateTime 0 N YYYY-MM- DDThh:mm:ss
Instance_Id string 36 Y uniqueidentifier
communityid int 0   group_id
merchantaccountname string 100    

 

Recurring Transactions

The iModules system provides clients the capability to deploy recurring billing in their Online Giving and Membership systems.  In the Online Giving system, the options are for Scheduled Payments and / or Perpetual Payments:

Scheduled Payments - User selects to donate a certain amount, for example $1,000, and spread that donation out over a payment schedule with the first payment being now and the subsequent payments as selected by the user.  If selected as quarterly, the user would submit and be charged an initial amount of $250, and then three subsequent quarterly amounts of $250 for the remaining $750.  iModules clients configure the options available to their members for Scheduled Payments.

Perpetual Payments - Users selects to donate a certain amount, for example $100, on a regular recurring base with no set end date.  iModules clients configure the available options for the perpetual scheduled.  The user selects the amount they want to commit to, in this case $100, and determines the occurrence of the subsequent perpetual donation transactions They are then charged for the initial $100 amount, and then subsequently charged for the subsequent perpetual amount commitments.  Each donation is for the same amount as the initial transaction.

If the PaymentType contains a Value of ‘RT’ (Recurring Transaction) or 'PT' (Perpetual Transaction instead of a Value of ‘OT’ (One-time Transaction), additional recurring billing fields will be returned.

Original Recurring Transaction (Control Query)

Recurring Transaction (Control Query)
<MemberInformation Constituent_Id="12345">
 <Column Name="Email Address" Value="test@test.com" />
 <Column Name="First Name" Value="Charlie" />
 <Column Name="Last Name" Value="Murphy" />
  <Instances>
   <Instance Instance_Id="78dad999-b9aa-9999-9de0-af284730f999">
    <Column Name="Library_Endowment" Value="1200.0000" />
    <Transactions>
     <Transaction Transaction_Id="1090" IsSuccess="true" IsReviewed="true">
      <Column Name="amount" Value="100.0000" />
      <Column Name="purchasedate" Value="2009-12-07T17:03:26" />
      <Column Name="authorizationcode" Value="00999A" />
      <Column Name="billingname" Value="Charlie Murphy" />
      <Column Name="creditcardtype" Value="VISA" />
      <Column Name="lastfourdigits" Value="1234" />
      <Column Name="billingemail" Value="test@test.com" />
      <Column Name="billingstreet1" Value="1010 Main St." />
      <Column Name="billingcity" Value="Overland Park" />
      <Column Name="billingstate" Value="KS" />
      <Column Name="BillingZip" Value="66213" />
      <Column Name="billingcountry" Value="US" />
      <Column Name="PaymentType" Value="RT" />
      <Column Name="paymentfrequency" Value="12" />
      <Column Name="totalscheduledamount" Value="1200.0000" />
      <Column Name="nextpaymentamount" Value="100.0000" />
      <Column Name="nextpaymentdate" Value="2010-01-07T17:03:26" />
     </Transaction>
    </Transactions>
   </Instance>
  </Instances>
 </MemberInformation>


Subsequent Recurring Transactions (Control Query)

Subsequent recurring transactions are then available for retrieval (In our example above, 11 more transactions would take place in theory). After they occur, additional transactions will be available for return in the transactions node. In the Control Query, querying a date range that includes any of the transaction dates will return the entire record and all transactions that have been processed. Items in blue will be unique to that transaction.

 

Subsequent Recurring Transactions (Control Query)
<MemberInformation Constituent_Id="88888888" Last_Updated="2010-04-28T13:25:59">
 <Column Name="CLASS" Value="2000"/>
 <Column Name="FIRST_NAME" Value="Mike/>
 <Column Name="H1_PHONE" Value="(312)555-5555"/>
 <Column Name="LAST_NAME" Value="Smith"/>
 <Column Name="PREF_EMAIL" Value="test@yahoo.com"/>
 <Column Name="HA1" Value="1 Main Street"/>
 <Column Name="HA2" Value=""/>
 <Column Name="HA3" Value=""/>
 <Column Name="HCITY" Value="Minneapolis"/>
 <Column Name="HNATION" Value=""/>
 <Column Name="HSTATE" Value="MN"/>
 <Column Name="HZIP" Value="55419-1324"/>
 <Column Name="Contributions - Make a Gift - Gift in Honor of" Value=""/>
 <Column Name="Contributions - Make a Gift - Gift in Memory of" Value=""/>
 <Column Name="Contributions - Special Instructions" Value=""/>
 <Column Name="Make A Gift - Other designation" Value=""/>
 <Instances>
  <Instance Instance_Id="df796f86-ba3a-441c-9b7d-c40fc61a8bf1">
   <Column Name="MakeAGift-DonationAmount" Value=""/>
   <Column Name="MakeAGift-MakeAGiftDesignations">
    <Designations> <!-- NOTE: Designation information is only tied to the initial transaction of a scheduled payment.  It is tied to every transaction of a perpetual payment. -->
     <Designation ID="526" Amount="1000.08" Text="Annual Fund" Value="Annual Fund"/>
    </Designations>
   </Column>
   <Transactions>
    <Transaction Transaction_Id="20084" IsSuccess="true" IsReviewed="true">
     <Column Name="amount" Value="41.6700"/>
     <Column Name="purchasedate" Value="2010-07-01T02:42:44"/>
     <Column Name="authorizationcode" Value="072736"/>
     <Column Name="billingname" Value="Mike Smith"/>
     <Column Name="creditcardtype" Value="VISA"/>
     <Column Name="lastfourdigits" Value="1111"/>
     <Column Name="achbankname" Value=""/>
     <Column Name="achbankstate" Value=""/>
     <Column Name="achaccountnumlast2" Value=""/>
     <Column Name="achroutingnumlast2" Value=""/>
     <Column Name="achchecknum" Value=""/> 
     <Column Name="achaccounttype" Value=""/>
     <Column Name="billingemail" Value="test@yahoo.com"/>
     <Column Name="billingstreet1" Value="1 Main Street"/>
     <Column Name="billingstreet2" Value=""/>
     <Column Name="billingcity" Value="Minneapolis"/>
     <Column Name="billingstate" Value="MN"/>
     <Column Name="BillingZip" Value="55419"/>
     <Column Name="billingcountry" Value="US"/>
     <Column Name="PaymentType" Value="RT"/>
     <Column Name="paymentfrequency" Value="12"/>
     <Column Name="totalscheduledamount" Value="1000.0800"/>
     <Column Name="nextpaymentamount" Value="41.6700"/>
     <Column Name="nextpaymentdate" Value="2010-09-01T14:41:27"/>
     <Column Name="Ledger_Values" Value=""/>
    </Transaction>
    <Transaction Transaction_Id="20253" IsSuccess="true" IsReviewed="true">
     <Column Name="amount" Value="41.6700"/>
     <Column Name="purchasedate" Value="2010-08-01T02:41:49"/>
     <Column Name="authorizationcode" Value="184177"/>
     <Column Name="billingname" Value="Mike Smith"/>
     <Column Name="creditcardtype" Value="AMEX"/>
     <Column Name="lastfourdigits" Value="1111"/>
     <Column Name="achbankname" Value=""/>
     <Column Name="achbankstate" Value=""/>
     <Column Name="achaccountnumlast2" Value=""/>
     <Column Name="achroutingnumlast2" Value=""/>
     <Column Name="achchecknum" Value=""/>
     <Column Name="achaccounttype" Value=""/>
     <Column Name="billingemail" Value="test@yahoo.com"/>
     <Column Name="billingstreet1" Value="1 Main Street"/>
     <Column Name="billingstreet2" Value=""/>
     <Column Name="billingcity" Value="Minneapolis"/>
     <Column Name="billingstate" Value="MN"/>
     <Column Name="BillingZip" Value="55419"/>
     <Column Name="billingcountry" Value="US"/>
     <Column Name="PaymentType" Value="RT"/>
     <Column Name="paymentfrequency" Value="12"/>
     <Column Name="totalscheduledamount" Value="1000.0800"/>
     <Column Name="nextpaymentamount" Value="41.6700"/>
     <Column Name="nextpaymentdate" Value="2010-09-01T14:41:27"/>
     <Column Name="Ledger_Values" Value=""/>
    </Transaction>
   </Transactions>
  </Instance>
 </Instances>
</MemberInformation>

 

Recurring Transactions (Transactions Query)

Recurring Transactions (Transactions Query)
<Transaction Transaction_Id="20084" IsSuccess="true" IsReviewed="true">
 <Column Name="amount" Value="41.6700" />
 <Column Name="purchasedate" Value="2010-07-01T02:42:44" />
 <Column Name="authorizationcode" Value="072736" />
 <Column Name="billingname" Value="Mike Smith" />
 <Column Name="creditcardtype" Value="VISA" />
 <Column Name="lastfourdigits" Value="1111" />
 <Column Name="billingemail" Value="test@yahoo.com" />
 <Column Name="billingstreet1" Value="1 Main Street" />
 <Column Name="billingcity" Value="Minneapolis" />
 <Column Name="billingstate" Value="MN" />
 <Column Name="BillingZip" Value="55419" />
 <Column Name="billingcountry" Value="US" />
 <Column Name="PaymentType" Value="RT" />
 <Column Name="paymentfrequency" Value="12" />
 <Column Name="totalscheduledamount" Value="1000.0800" />
 <Column Name="nextpaymentamount" Value="41.6700" />
 <Column Name="nextpaymentdate" Value="2010-09-01T14:41:27" />
 <Column Name="Instance_Id" Value="df796f86-ba3a-441c-9b7d-c40fc61a8bf1" />
 <Column Name="Control_Id" Value="1119" />
 <Column Name="Control_Type" Value="campaign" />
 <Column Name="Control_Name" Value="Contributions" />
 <Column Name="Constituent_Id" Value="88888888" />
 <Column Name="imod_member_id" Value="29153" />
</Transaction>

 

Subsequent Transaction ... one month later (Transactions Query)

Subsequent Transaction...one month later (Transaction Query)
<Transaction Transaction_Id="20253" IsSuccess="true" IsReviewed="true">
 <Column Name="amount" Value="41.6700" />
 <Column Name="purchasedate" Value="2010-08-01T02:41:49" />
 <Column Name="authorizationcode" Value="184177" />
 <Column Name="billingname" Value="Mike Smith" />
 <Column Name="creditcardtype" Value="AMEX" />
 <Column Name="lastfourdigits" Value="1111" />
 <Column Name="billingemail" Value="test@yahoo.com" />
 <Column Name="billingstreet1" Value="1 Main Street" />
 <Column Name="billingcity" Value="Minneapolis" />
 <Column Name="billingstate" Value="MN" />
 <Column Name="BillingZip" Value="55419" />
 <Column Name="billingcountry" Value="US" />
 <Column Name="PaymentType" Value="RT" />
 <Column Name="paymentfrequency" Value="12" />
 <Column Name="totalscheduledamount" Value="1000.0800" />
 <Column Name="nextpaymentamount" Value="41.6700" />
 <Column Name="nextpaymentdate" Value="2010-09-01T14:41:27" />
 <Column Name="Instance_Id" Value="df796f86-ba3a-441c-9b7d-c40fc61a8bf1" />
 <Column Name="Control_Id" Value="1119" />
 <Column Name="Control_Type" Value="campaign" />
 <Column Name="Control_Name" Value="Contributions" />
 <Column Name="Constituent_Id" Value="88888888" />
 <Column Name="imod_member_id" Value="29153" />
</Transaction>

TransactionItems

TransactionItems may be returned from the control query methods or the transactions query methods. Any transaction items will be inside a <TransactionItems> element within each <Transaction> element.

TransactionItems (Transaction Query)
<ArrayOfTransactionInformation>
 <Transaction Transaction_Id="42874" IsSuccess="true" IsReviewed="true">
  <Column Name="amount" Value="265.5400"/>
  <Column Name="purchasedate" Value="2012-09-26T15:43:12"/>
  <Column Name="authorizationcode" Value="IMODTEST000"/>
  <Column Name="custtransnum" Value="IMODCTN_154311P672"/>
  <Column Name="retrievalcode" Value="IMODRC_154311P672&amp;line2&amp;line3&amp;line4"/>
  <Column Name="appealcode" Value=""/>
  <Column Name="transactionlastupdated" Value="2012-09-26T15:43:12"/>
  <Column Name="billingname" Value="Felis86 Solus"/>
  <Column Name="creditcardtype" Value="VISA"/>
  <Column Name="lastfourdigits" Value=""/>
  <Column Name="achbankname" Value=""/>
  <Column Name="achbankstate" Value=""/>
  <Column Name="achaccountnumlast2" Value=""/>
  <Column Name="achroutingnumlast2" Value=""/>
  <Column Name="achchecknum" Value=""/>
  <Column Name="achaccounttype" Value=""/>
  <Column Name="billingemail" Value="imodhelp+felis86@imodules.com"/>
  <Column Name="billingphone" Value="55-555-5555"/>
  <Column Name="billingstreet1" Value="7400 W 132nd St"/>
  <Column Name="billingstreet2" Value=""/>
  <Column Name="billingcity" Value="Overland Park"/>
  <Column Name="billingstate" Value="KS"/>
  <Column Name="billingzip" Value="66213"/>
  <Column Name="billingcountry" Value="US"/>
  <Column Name="paymenttype" Value="OT"/>
  <Column Name="paymentfrequency" Value=""/>
  <Column Name="totalscheduledamount" Value=""/>
  <Column Name="nextpaymentamount" Value=""/>
  <Column Name="nextpaymentdate" Value=""/>
  <Column Name="paymentsremaining" Value=""/>
  <Column Name="amounttodate" Value=""/>
  <Column Name="firstpaymentdate" Value=""/>
  <Column Name="initialtransactionid" Value="0"/>
  <Column Name="fromfacebook" Value="False"/>
  <Column Name="communityid" Value="1"/>
  <Column Name="agentid" Value=""/>
  <Column Name="agentname" Value=""/>
  <Column Name="merchantaccountname" Value="mock"/>
  <Column Name="instance_id" Value="b07ee56c-af2d-4a92-be79-4fe0082ed7da"/>
  <Column Name="control_id" Value="9308"/>
  <Column Name="control_type" Value="event"/>
  <Column Name="control_name" Value="TransactionItems"/>
  <Column Name="constituent_id" Value=""/>
  <Column Name="imod_member_id" Value="137760"/>
  <TransactionItems>
   <TransactionItem Type="CommerceItem" Transaction_Item_Id="Item-44481">
    <Column Name="sku" Value="EVENTTICKET"/>
    <Column Name="total" Value="150.0000"/>
    <Column Name="quantity" Value="6"/>
   </TransactionItem>
   <TransactionItem Type="CommerceItem" Transaction_Item_Id="Item-44482">
    <Column Name="sku" Value="TSHIRT"/>
    <Column Name="total" Value="15.5400"/>
    <Column Name="quantity" Value="2"/>
   </TransactionItem>
   <TransactionItem Type="CommerceItem" Transaction_Item_Id="Item-44483">
    <Column Name="sku" Value="BENEFITDINNER"/>
    <Column Name="total" Value="100.0000"/>
    <Column Name="quantity" Value="2"/>
   </TransactionItem>
  </TransactionItems>
 </Transaction>
</ArrayOfTransactionInformation>

Designations (Control & Transactions Queries)

A Designation interface is available for users to select from a large number (400+) of designation options for allocating their overall donation amount. Behind the scenes, administrators have the ability to assign and export custom IDs associated with each designation and to provide reporting output for integration with offline database systems.

Manage Designations Screen:

Adding/Editing a Designation Screen:

Some very old designation controls will display the designation info in a column underneath the instance (as in some of the examples above),
but for all recent designation controls, the Designations Element will always be contained by a Transaction Element.
This applies to both Control Query and Transactions Query:

Designations (Transaction Query)
<ArrayOfTransactions>
 <Transaction Transaction_Id="3605" IsSuccess="true" IsReviewed="true">
  <Column Name="Control_Id" Value="2487" />
  <Column Name="Control_Type" Value="campaign" />
  <Column Name="Control_Name" Value="Test Campaign" />
  <Column Name="Amount" Value="100.0000" />
  <Column Name="PurchaseDate" Value="3/6/2009 8:39:35 AM" />
  <Column Name="AuthorizationCode" Value="012345" />
  <Column Name="BillingName" Value="Paul Stuart" />
  <Column Name="CreditCardType" Value="VISA" />
  <Column Name="BillingEmail" Value="paul@test.com" />
  <Column Name="BillingStreet1" Value="Winter Wonderland Rd." />
  <Column Name="BillingCity" Value="North Pole" />
  <Column Name="BillingState" Value="AK" />
  <Column Name="BillingZip" Value="01564" />
  <Column Name="BillingCountry" Value="USA" />
  <Column Name="PaymentType" Value="OT" />
  <Column Name="Instance_Id" Value="488ad0a1-380a-4679-8c73-4c5f7290f61f" />
  <Column Name="Member_Id" Value="119131" />
  <Column Name="Constituent_Id" Value="25820" />
  <Column Name="designations">
   <Designations>
    <Designation ID="7" Amount="33.0000" Text="First Designation" Value="33">
     <Ids>
      <Id Name="Advance Fund ID" Value="A17GDV84" />
      <Id Name="GL_Code" Value="yt7t6t" />
     </Ids>
    </Designation>
    <Designation ID="9" Amount="33.0000" Text="Third Designation" Value="33">
     <Ids>
      <Id Name="Advance Fund ID" Value="IDKR885R" />
      <Id Name="GL_Code" Value="9588347" />
     </Ids
    </Designation>
    <Designation ID="13" Amount="34.0000" Text="Fifth Designation" Value="34">
     <Ids>
      <Id Name="Advance Fund ID" Value="1234dd444" />
      <Id Name="GL_Code" Value="1346643" />
     </Ids>
    </Designation>
   </Designations>
  </Column
 </Transaction>
</ArrayOfTransactions>

Designations Element

    • Contains the designations for this campaign that was submitted by the member.

Designation Element

    • Will contain the ID attribute for holding the Encompass Designation ID.
    • Will contain the Amount attribute for holding the amount that was allocated to this designation.
    • Will contain the Text attribute for holding the Export Name of the designation.
    • May contain the Value attribute for holding the percentage that was allocated for this designation.
      • Percentage will only be available if the designations on the campaign are using the advanced display type.
    • May contain the Ids element for holding the ID values assigned to this designation by the administrator.

Ids Element

    • Holds the Ids for a designation.

Id Element

    • Will contain a Name attribute holding the name of the id. Name is configurable. The same ID Name cannot exist twice in the same designation.
    • Will contain a Value attribute holding the value of the id. Value is configurable.

Recurring Transactions

    • Scheduled payment recurring transactions include a summary of the designations specified with the first transaction.  For example, if the total gift amount is:
      • $1000.00
      • given over 10 payments of $100.00 each
      • designated to two designations for $500.00 each
      the first transaction for $100.00 would contain two designation elements for $500.00 each.  Any subsequent transactions tied to this scheduled payment would not contain designation information.
    • Perpetual giving recurring transaction include a summary of the designation for each transaction.  For example, if the gift amount is:
      • $100.00
      • given every month
      • designated to two designations for $50.00 each
      the first transaction for $100.00 would contain two designation elements for $50.00 each.  Any subsequent transactions tied to this perpetual gift would also contain two designation elements for $50.00 each.

Commerce ID Fields 

Commerce ID Fields (or LedgerValues) allow for association of a Form, Event, or Campaign with a specific Commerce ID value(s) in a backend database or ERP systems by associating all transactions programmatically with their respective accounting code. iModules staff will set up the Commerce IDs for the client, which will then be available via dropdown in the advanced options of the Commerce Form, Event or Campaign properties, as shown below. This capability provides clients the ability to direct transactions via the iModules Reporting / Web Services capabilities to the respective ledger / revenue accounts in their backend systems. Clients are able to input and manage these Commerce IDs via the Form, Event and Campaign building / editing interface, with the Commerce IDs being output in all associated iModules Reporting and Web Services.

 

Web Services LedgerValues output (example using Transaction Query):

Ledger Values Output (Transaction Query)
<Transaction Transaction_Id="4" IsSuccess="true" IsReviewed="true">
 <Column Name="amount" Value="500.0000" />
 <Column Name="purchasedate" Value="2009-02-09T16:12:27" />
 <Column Name="authorizationcode" Value="402825" />
 <Column Name="billingname" Value="James C Smith" />
 <Column Name="creditcardtype" Value="VISA" />
 <Column Name="lastfourdigits" Value="5336" />
 <Column Name="billingemail" Value="james@test.com" />
 <Column Name="billingstreet1" Value="1010 Main" />
 <Column Name="billingcity" Value="Boston" />
 <Column Name="billingstate" Value="MA" />
 <Column Name="BillingZip" Value="12345" />
 <Column Name="billingcountry" Value="US" />
 <Column Name="paymentType" Value="OT" />
 <Column Name="Instance_Id" Value="3ef156d2-292f-4ca4-817a-83b68aa2b763" />
 <Column Name="Control_Id" Value="856" />
 <Column Name="Control_Type" Value="campaign" />
 <Column Name="Control_Name" Value="2011 Annual Fund" />
 <Column Name="Constituent_Id" Value="2680" />
 <Column Name="imod_member_id" Value="15" />
 <LedgerValues>
  <LedgerValue Name="Ledger ID" Value="A12345" />
 </LedgerValues>
</Transaction>

UpdateResults

The following is a sample of the UpdateResults response. This applies to the Update web service method.

UpdateResults
<UpdateResults>
 <UpdateMemberResult Constituent_Id="0000099999" Is_New="False">
  <UpdateColumnResult Name="first_name" Success="True"></UpdateColumnResult>
  <UpdateInstanceResult Instance_Id="010101ab-ab01-01ab-0ab1-ab01010101ab" External_Id_Name=" External Row Id" External_Id_Value="1000">
   <UpdateColumnResult Name="donation-amount" Success="True"></UpdateColumnResult>
  </UpdateInstanceResult>
 </UpdateMemberResult>
</UpdateResults>

Each member updated is represented by an UpdateMemberResult element.

*Note - When an email is updated via a web service update, the "is_email_valid" checkbox (Boolean field) is updated to True. If the update is made but the email address is the same, the "is_email_valid" flag will not be changed. The process currently occurs when using the batch .csv file import tool as well.

UpdateMemberResult Element

    • Will contain a Constituent_Id attribute containing the constituent ID of the updated member
    • Will contain an Is_New attribute indicating whether or not the member was added as a result of the request.
    • May contain one or more UpdateMemberResult elements.

UpdateMemberResult Element

    • May contain one or more UpdateColumnResult elements representing the non-instance fields updated.
    • May also contain one or more UpdateInstanceResult elements representing the instances updated.

UpdateInstanceResult Element

    • Will contain an Instance_Id attribute containing the instance ID.
    • May also contain an External_Id_Name and External_Id_Value attribute (see External Row Identifiers).
    • May also contain one or more UpdateColumnResult elements representing the instance fields updated.

UpdateColumnResult Element

    • Will contain a Name attribute which contains the name of the field.
    • Will contain a Success attribute which indicates whether or not the field was successfully updated (see Error Syntax).

 

Error Syntax

With regard to error syntax, there are two different types of web service methods in iModules Web Service 2.0. All web service methods with the exception of Update will return a single error message in the response. Update may return an error message on each element that is being updated.

Single Error Response

The following is an example of a single error response from a web service method. An Error may be included as a child element of the ArrayOfAllControlResults, ArrayOfAllColumnResults, or ArrayOfAllControlResults elements.

<ArrayOf...>
 <Error Code="2005" Description="The specified credentials are not valid."/>
</ArrayOf...>

Error Element

    • Will contain a Code attribute containing the error code.
    • Will contain a Description element containing a description of the error that has occurred. The message will often contain additional information about the error (see Error Codes).

Update Error Response

The following is an example of an error response from an Update request. Error elements may be included as child elements of UpdateResults, UpdateMemberResult, UpdateColumnResult, or UpdateInstanceResult.

Update Error Response
<UpdateResults>
 <UpdateMemberResult Constituent_Id="0000011111" Is_New="False">
  <UpdateColumnResult Name="first_name" Success="False">
   <Error Code="2207" Description="The column first_name already contains the specified update value."/>
  </UpdateColumnResult>
  <UpdateInstanceResult Instance_Id="ecbcfaeb-5ae4-4657-95d2-036f6107804c">
   <UpdateColumnResult Name="donation_amount" Success="True">
    <Error Code="2207" Description="The column donation_amount already contains the specified update value."/>
   </UpdateColumnResult>
  </UpdateInstanceResult>
  <UpdateInstanceResult Instance_Id="00000000-0000-0000-0000-000000000000">
   <Error Code="2010" Description="No instance ID or external row ID is defined for the defined update data."/>
  </UpdateInstanceResult>
 </UpdateMemberResult>
 <UpdateMemberResult Constituent_Id="0000099999" Is_New="False">
  <Error Code="2008" Description="The member with constituent ID 0000099999 could not be found and adding new members set to false."/>
 </UpdateMemberResult>
</UpdateResults>

Error Codes

COLUMN, CONSITUENT ID, and VALUE are replaced with the relevant values.

In addition to the Query web services outlined above (web services with the “Query” suffix), there are Debug web services (web services with the “Debug” suffix) available to help debug an error code you don’t understand. Debug web services should be used when having problems with parameters or with accessing the correct method when using Query web services. These web services allow all parameters with simple types to be passed in as string values. These values are then converted to the appropriate type.

Error Code

Error Message

Additional Information

2000 Adding constituents without a configured constituent ID column is not allowed.  
2001 Web services are currently unavailable. The availability of web services may limited, though they are always available under the current configuration.
2002 No rows were found.  
2003 Invalid date order.  
2004 The syntax for the specified filter was not valid.  
2005 The specified credentials are not valid. iModules development team is notified when this error occurs.
2006 No administrative settings have been configured. iModules development team is notified when this error occurs.
2007 No data for updating has been defined.  
2008 The member with constituent ID CONSTITUENT ID could not be found and adding new members set to false. You can specify whether or not to allow member records to be added. This error is returned when adding members is not allowed and the specified member record is not found.
2009 No constituent ID is defined for the defined update data.  
2010 No instance ID or external row ID is defined for the defined update data.  
2011 The control ID specified does not exist.  
2012 This control does not contain instance data.  
2013 The member with member id ID could not be found and adding new members set to false.  
2014 Updating constituent id would result in duplicates or duplicates already exist.  
2015 Only use one of the following identifiers, CONSTITUENTIDFIELD or MEMBERIDFIELD.  
2100 VALUE is not a valid boolean value. Only applicable when using the Debug web services.
2101 VALUE is not a valid date value. Only applicable when using the Debug web services.
2102 VALUE is not a valid decimal value. Only applicable when using the Debug web services.
2103 VALUE is not a valid integer value. Only applicable when using the Debug web services.
2104 VALUE is not a valid guid value. This error is applicable for both Query and Debug web services as the login value is passed in as a string in both cases.
2105 VALUE is not a valid small integer value. Only applicable when using the Debug web services.
2200 Error attempting to update the column COLUMN which is deleted.  
2201 The column COLUMN was specified more than once.  
2202 The column COLUMN was specified more than once.  
2203 The column COLUMN is not valid.  
2204 The value specified for column COLUMN exceeds the maximum length.  
2205 The filter column COLUMN is not valid.  
2206

No columns have been defined.

No valid columns have been defined for the request.
2207 The column COLUMN already contains the specified update value.  
2208 FIELD was updated online within the specified date range. Just a warning.
2209 Membership data is not allowed when updating an instance.  
2210 Membership cannot be updated because it has pending scheduled payments.  
2211 Expiration date is required.  
2212 Invalid membership level.  
2213 Invalid membership purchase status.  
2214 Lifetime memberships cannot have expiration dates.  
2215 Lifetime Memberships cannot lapse.  
2216 Membership level, purchase date, expiration date, and status are all required update a membership.  
2217 Membership level, purchase date, expiration date, and status are all required update a membership.  
2218 Membership was updated online within the specified date range.  
2219 Membership cannot be shortened (via expiration date) when it has pending scheduled payments.  
2220 Membership cannot be shortened (via expiration date) when set to auto renew.  
2221 Only membership level, purchase date, expiration date, and status can be set via web services.  
2222 Is registered is not a valid changed column  
2223 The specified Membership Level is [disabled and is] not accepting new memberships.  
2300 Error inserting new member with constituent ID CONSTITUENT ID.  
2301 Error populating column data.  
2302 General membership error.  
2303 General membership error.  
2400 General membership error.  
2401 The limit of LIMIT concurrent connection has been exceeded.  
2500 Could not find column FIELD.  
2501 The member with constituent id CONSTITUENTID could not be found in the specified community  
2502 The specificed community does not exist.  
2600 The baseMemberId and mergeMemberId must be different.  
2601 The baseMemberId is not valid.  
2602 The mergeMemberId is not valid.  
2603 The baseMemberId and mergeMemberId are already flagged to be merged.  
2604 The baseMemberId is already flagged to be merged into another record.  
2605 The mergeMemberId is already flagged to be merged into another record.  
3000 Webservices feature is not enabled.  
4000 The username could not be found in the system.  
0 An unhandled exception occurred while processing the request. Please contact support for more information.  

 

Message Syntax

The <Message> type will be used in place of the <Error> type when:

    • Updating a field with the same exact value. (Success="true" will be returned as an attribute of • <UpdateColumnResult> when this occurs.)
    • A field is not updated because of falling in the specified date range of the UpdateKeepChanged date • parameters.

Example of the XML that is returned:

Message Syntax
<?xml version="1.0"?>
 <soap:Body>
  <UpdateResponse xmlns="http://imodules.com/WebServices/GeneralQuery/">
   <UpdateResult>
    <UpdateMemberResult Constituent_Id="SS1234" Is_New="false">
     <UpdateColumnResult Name="FIRST_NAME" Success="true">
      <Message Code="2207" Description="The column FIRST_NAME already contains the specified update value."/>
     </UpdateColumnResult>
     <UpdateColumnResult Name="LAST_NAME" Success="true">
      <Message Code="2207" Description="The column LAST_NAME already contains the specified update value."/>
     </UpdateColumnResult>
     <UpdateColumnResult Name="PREF_EMAIL" Success="true">
     </UpdateColumnResult>
    </UpdateMemberResult>
   </UpdateResult>
  </UpdateResponse>
 </soap:Body>
</soap:Envelope>

Best Practices

iModules recommends taking the following things into account when configuring your middleware:

Paging Threshold

Identify the maximum number of rows of data allowed to be sent (pushed) or received (pulled) in a single set. For example, if there were 5,000 rows of data being sent and the paging threshold was set to 1,000, then there would be 5 sets of data sent, each set containing 1,000 rows.

To accomplish a paging threshold when pulling data, first make a call where only the Constituent ID (client specific primary key) is requested in the “columns” parameter. This will return a list of IDs for all constituent records that have been updated over the specified date range. From here the filter feature can be used to pull back multiple record sets. Example – [SPRIDEN_PIDM] in (‘000012345’,’000012346’,’000012347’ …)

Recommend value: 500 constituent records

Web Service Timeout Limit

Identify the maximum allowable time between a request being sent and a response confirming the request was fulfilled.

Recommended value: 3 minutes

Availability

Company Web Services utilities are intended to provide bi-directional incremental data updates. This is especially true during peak hours. Because transactions through web services impact the same production database server used for the client’s web site, clients should avoid large web service requests during normal business hours from Monday through Friday from 8:00 AM – 5:00 PM Central Standard US time.

Further, Web Services may experience increased service timeouts or other interruptions from Midnight – 2:00 AM (nightly system back-ups) and 3:30 AM – 7:00 AM (daily batch services) Central Standard US time. We highly encourage designing a system where web services transactions are suspended during these two critical time frames and resumed outside of them. These times are subject to change by Company and will be communicated if adjusted.

Generally speaking, the Company web service handler will spend no more than 90 seconds attempting to complete a transaction. If the transaction cannot be handled within that time frame, the transaction may timeout. The Client’s system is free to retry the transaction following a timeout. As mentioned above, the likelihood of timeouts may increase during time periods discussed.

Concurrent Requests

By default, the web services handler will allow one concurrent request as a guard against any one client saturating the database resulting in reduced service to all clients.  As of January 2014, this no longer applies to LoginQuery requests.

Linking to Forms

Web service results can be used to create links to forms.  This is accomplished by using some constant values and some data elements returned from web services.  This works by using the IModules content redirect resource.  The format for the link is as follows:

[SITE_URL]/controls/cms_v2/contentsystem/content_center_redirect.aspx?sid=[SITE_ID]&gid=[GROUP_ID]&form_id=[FORM_ID]

The values you need to replace are:

[SITE_URL] - a constant value

[SITE_ID] - a constant value

[GROUP_ID] - a data element from web services results

[FORM_ID] - a data element from web services results

Have more questions? Submit a request