LDSTechForumWikiProjects

Community Services

Community Development Best Practices edit

Those working on community projects for the Church frequently need access to Membership and Organization information. Community Services, also known as NGIServices, provide access to this type of information through SOAP service requests. This document hopes to define how a community developer can access these services and what is available to them.

What are Community Services

One thing is for sure, the term service is used too frequently. This can quickly cause confusion when working with an application that has SOAP Web Services, Restful Web Services, and also a Service layer. It is important to note the differences between each, as we use all of these. When we are talking Community Services we are specifically talking about the SOAP Web Service.

SOAP Web Services
SOAP[1] is a message format we use to pass data between our community applications and the NGIServices. In order to get access to Membership and Organization information we create a SOAP request from our community application and send it off to the NGIServices application. This data is not directly available through a database connection.
Restful Web Services
REST[2] is often used more loosely to describe any simple interface which transmits domain-specific data over HTTP without an additional messaging layer such as SOAP. We use REST to pass data to and from the user's Web Browser and the community application. JSON is our preferred message format though XML is also an option.
Service Layer
The Service Layer refers to our Stack architecture. In the Stack architecture image you will notice that we have View, Service, and Persistence layers in our application. Each is defined by the type of work that is done within that layer. The Service Layer is were we communicate with database services, web services, and/or message services. Below you will see how this layer is configured to allow us to communicate with the Community Services.

Systems accessible through Community Services

There are a couple projects internal to the church that are used to manage Membership and Organizational data. It is the data managed by these projects that we are exposing through the Community Services.

CMIS (Church Membership Information System)
Church membership information is stored, maintained and updated through the Church Member Information System. It is an internal system that is accessible only to MSR employees and authorized users.
CDOL (Church Directory of Organizations and Leaders)
A database that contains information about all Church units and their leaders and positions.
  • Please note that this type of information is highly protected for privacy reasons. Developers will only have access to generated data and not actual membership data.

What Community Services Provide

Membership Information

  • Validate Member (validateMember) - Looks up a member based on their membership ID (MRN) and returns the member, unit and position info if the member is found.
  • Member List (getMemberList - Looks up members based upon one or more unit number. Other parameters are detailed on the WSDL. Returns a list of a simplified version of a Member.
  • Members of Parent Unit (getMembersOfParentUnit) - Looks up members based upon a parent unit (like a stake). Other parameters are detailed on the WSDL. Returns a list of a simplified version of a Member.
  • Household (getHouseholdById) - Looks up a household by the head of households membership ID (MRN).
  • Household Group (getGroupById) - Looks up a household group based upon it's id then populates the households addresses with the lat/longs and then adds the list of households to the group.
  • Household Group by Unit Number (getGroupsByUnitNbr) - Looks up household groups based upon a unit number.

Directory Information

  • Stake Directory (getStakeDirectory) - Looks up a directory of members based upon the stake unit number. A membership ID (MRN) can be passed in as well and will be verified as a member of the stake. Returns a Directory that has a list of Households.
  • Ward Directory (getWardDirectory) - Looks up a directory of members based upon the ward/branch unit number. Optionally choose to exclude children from the directory listing. Returns a Directory that has a list of Households.

Unit/Organization Information

  • Organization By Unit Number (getOrganizationByUnitNo) - Looks up an Organization based upon a unit number.
  • Organization By Unit Type (getOrganizationByUnitType) - Looks up the parent Organization based upon an organization type. For example, to get the Stake of a known ward or branch then pass in the unit number of the ward or branch and the unit type of Stake.
  • Unit Leaders (getUnitLeaders) - Looks up all leaders based upon a unit number. Includes leaders with the following positions : Stake President, Stake President First Counselor, Stake President Second Counselor, Bishop, District President, Branch President, Stake Clerk, Ward Clerk, District Clerk, or Branch Clerk.

Services Configuration

In order to communicate with the Community Services the project needs to be configured as a SOAP client. The IT department has standardized on the use of the CXF Java library for Web Service communication. These are the known steps that can be taken to configure an application to communicate with Community Services. (This is a draft and may be missing configuration. Contact NateD if you have questions.)

Services Location and Credentials

Community Services, for development purposes, are hosted at http://tech.lds.org/CMIS-Services.
Community Services WSDL can be found at http://tech.lds.org/CMIS-Services/Services/MisService?wsdl.
(DEPRECATED) CMIS-client documentation can be found at Ngis-client.

Username: ngis
Password: ngis

Add dependencies to pom

Dependencies need to be added to the application's pom.xml which is found at the base of the web application directory.

	<!-- CMIS service client-->
        <dependency>
            <groupId>org.lds.platform</groupId>
            <artifactId>CMIS-Services-client</artifactId>
            <version>1.5.3-SNAPSHOT</version>
        </dependency>

By including the dependency you get both the SOAP Client classes and the Spring configuration for the Web Service.

Application Properties (Deprecated)

IMPORTANT: Local Unit Calendar and Local Unit Directory no longer need the APPLICATION_PROPERTY table. All NGIS services table entries you see below are now provided for you in the applicationContext.xml file in your project as the default JNDI values. See the database configuration section for configuration of non-Oracle database properties. Any non-default JNDI values can be configured in your local instance of tomcat via the context.xml file.

(The following will soon be removed from this page.) Each application will have a database with multiple tables where application data will be stored. One of these tables should be called APPLICATION_PROPERTY and will contain properties that are dynamically loaded for the application environment. To create the table and insert the properties run the script below for the database you are using. See Community Database for information on setting up a database.

---- ORACLE Script ----
CREATE TABLE APPLICATION_PROPERTY (
		PROP_KEY VARCHAR2(1020) NOT NULL,
		PROP_VALUE VARCHAR2(4000) NOT NULL,
		SECRET CHAR(1) NOT NULL,
		UPDATED_BY VARCHAR2(64) NOT NULL,
		UPDATED_DATE TIMESTAMP NOT NULL,
		CREATED_BY VARCHAR2(64) NOT NULL, 
		CREATED_DATE TIMESTAMP NOT NULL
	);
 
ALTER TABLE APPLICATION_PROPERTY ADD CONSTRAINT PK_APPLICATION_PROPERTY PRIMARY KEY (PROP_KEY);
 
INSERT INTO application_property (prop_key, created_date, created_by, updated_date, updated_by, secret, prop_value) 
VALUES ('cmis.endpoint.username', '02-OCT-09', 'default', '02-OCT-09', 'default', 'a', 'ngis');
INSERT INTO application_property (prop_key, created_date, created_by, updated_date, updated_by, secret, prop_value) 
VALUES ('cmis.endpoint.password', '02-OCT-09', 'default', '02-OCT-09', 'default', 'a', 'ngis');
INSERT INTO application_property (prop_key, created_date, created_by, updated_date, updated_by, secret, prop_value) 
VALUES ('cmis.endpoint.url', '02-OCT-09', 'default', '02-OCT-09', 'default', 'a', 
'http://tech.lds.org/CMIS-Services/Services/MisService');
COMMIT;
 
---- PostgreSQL Script -----
CREATE TABLE APPLICATION_PROPERTY (
        PROP_KEY VARCHAR(1020) NOT NULL,
        PROP_VALUE VARCHAR(4000) NOT NULL,
        SECRET CHAR(1) NOT NULL,
        UPDATED_BY VARCHAR(64) NOT NULL,
        UPDATED_DATE TIMESTAMP NOT NULL,
        CREATED_BY VARCHAR(64) NOT NULL,
        CREATED_DATE TIMESTAMP NOT NULL
); 
 
ALTER TABLE APPLICATION_PROPERTY ADD CONSTRAINT PK_APPLICATION_PROPERTY PRIMARY KEY (PROP_KEY); 
 
INSERT INTO application_property (prop_key, created_date, created_by, updated_date, updated_by, secret, prop_value) 
VALUES ('cmis.endpoint.username', '02-OCT-09', 'default', '02-OCT-09', 'default', 'a', 'ngis');
INSERT INTO application_property (prop_key, created_date, created_by, updated_date, updated_by, secret, prop_value) 
VALUES ('cmis.endpoint.password', '02-OCT-09', 'default', '02-OCT-09', 'default', 'a', 'ngis');
INSERT INTO application_property (prop_key, created_date, created_by, updated_date, updated_by, secret, prop_value) 
VALUES ('cmis.endpoint.url', '02-OCT-09', 'default', '02-OCT-09', 'default', 'a', 
'http://tech.lds.org/CMIS-Services/Services/MisService');
COMMIT;

Client Communication

Communication to Community Services is always done in the Services Layer (see definition above).

In the implementation class add the Services class by added the following source. This is needed so that the Spring Framework will autowire the class and make it available to methods within the Service Layer.

        @Resource(name="memberClientGenerator")
        private CmisServiceClientImpl cmisService;

Then using the service becomes quite simple as you can see by the example below.

	public List<SimpleMember> findUnitMembers(Long unitNo) {
		return cmisService.getClient().getMemberList(unitNo, null, null, null, null, NameFormatType.SIMPLE);
	}

One of the best ways to understand how all of this comes together is to look at the Real World Example below.

Real World Example - Local Unit Calendar

Local Unit Calendar (LUC Repository)
An application that allows members to manage and maintain calendars for any Unit that they are over. LUC includes all of the configuration detailed above. When a user logs into the Local Unit Calendar application we need to know several things about that user. Luckily as part of the LDS Account authentication process we get back a user's Member Record Number (MRN). With that number we can submit a request to the Community Services that will validate the member and in fact return a ValidatedMember object to us. The ngis-client dependency provides this functionality for us so there is no need to do anything else to implement this. Accessing additional information involves additional steps, however.

The source code of LUC will be referenced in the next section(s). The base project is accessible through the SVN repository at https://dev.lds.org/svn/calendar . Anyone with an LDS Account will be able to view the source code by browsing to the base project. If you need access to check out the project then special access will need to be granted to you.

Accessing Members Associated to a Stake

As part of LUC we need to be able to get a list of members that are in the stake. In MemberServiceImpl.java we create a method that calls the method available to us through the client service class.


Full Source : MemberServiceImpl.java

        @Resource(name="memberClientGenerator")
        private CmisServiceClientImpl cmisService;
 
	public List<SimpleMember> findMembersOfParentUnit(Long unitNo) {
		return cmisService.getClient().getMembersOfParentUnit(unitNo, null, null, null, null);
	}

Then we can call this service layer method and pass in the Member's unit number which will then return us a list of SimpleMember objects.

Full Source MemberWS.java

	public MinimalDetail[] getStakeCalendars() {
		Long unitNo = memberDetail.getUnitNo();
		Organization unit = unitService.findUnitOfType(unitNo, UnitType.STAKE);
		List<SimpleMember> members = memberService.findMembersOfParentUnit(
				unit.getUnitNbr());
		return minimalizedSimpleMemberArray(members);
	}

WSDL Output

<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions name="MisService" targetNamespace="http://mis.ics.lds.org/api" 
  xmlns:ns1="http://cxf.apache.org/bindings/xformat" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
  xmlns:tns="http://mis.ics.lds.org/api" 
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
             targetNamespace="http://mis.ics.lds.org/api" xmlns:tns="http://mis.ics.lds.org/api" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="CmisLocaleInfoResponse" type="tns:CmisLocaleInfoResponse" />
            <xs:element name="StakeDirectoryResponse" type="tns:StakeDirectoryResponse" />
            <xs:element name="ValidateMemberResponse" type="tns:ValidateMemberResponse" />
            <xs:element name="WardDirectoryResponse" type="tns:WardDirectoryResponse" />
            <xs:element name="address" type="tns:Address" />
            <xs:element name="getChildUnits" type="tns:getChildUnits" />
            <xs:element name="getChildUnitsResponse" type="tns:getChildUnitsResponse" />
            <xs:element name="getCmisLocaleInfo" type="tns:getCmisLocaleInfo" />
            <xs:element name="getGroupById" type="tns:getGroupById" />
            <xs:element name="getGroupByIdResponse" type="tns:getGroupByIdResponse" />
            <xs:element name="getGroupsByUnitNbr" type="tns:getGroupsByUnitNbr" />
            <xs:element name="getGroupsByUnitNbrResponse" type="tns:getGroupsByUnitNbrResponse" />
            <xs:element name="getHouseholdById" type="tns:getHouseholdById" />
            <xs:element name="getHouseholdByIdResponse" type="tns:getHouseholdByIdResponse" />
            <xs:element name="getMemberList" type="tns:getMemberList" />
            <xs:element name="getMemberListForMultipleUnits" type="tns:getMemberListForMultipleUnits" />
            <xs:element name="getMemberListForMultipleUnitsResponse" type="tns:getMemberListForMultipleUnitsResponse" />
            <xs:element name="getMemberListResponse" type="tns:getMemberListResponse" />
            <xs:element name="getMembersOfParentUnit" type="tns:getMembersOfParentUnit" />
            <xs:element name="getMembersOfParentUnitResponse" type="tns:getMembersOfParentUnitResponse" />
            <xs:element name="getOptOut" type="tns:getOptOut" />
            <xs:element name="getOptOutResponse" type="tns:getOptOutResponse" />
            <xs:element name="getOrganizationByUnitNo" type="tns:getOrganizationByUnitNo" />
            <xs:element name="getOrganizationByUnitNoResponse" type="tns:getOrganizationByUnitNoResponse" />
            <xs:element name="getOrganizationByUnitType" type="tns:getOrganizationByUnitType" />
            <xs:element name="getOrganizationByUnitTypeResponse" type="tns:getOrganizationByUnitTypeResponse" />
            <xs:element name="getQuarterlyReport" type="tns:getQuarterlyReport" />
            <xs:element name="getQuarterlyReportResponse" type="tns:getQuarterlyReportResponse" />
            <xs:element name="getServiceInfo" type="tns:getServiceInfo" />
            <xs:element name="getServiceInfoResponse" type="tns:getServiceInfoResponse" />
            <xs:element name="getStakeDirectory" type="tns:getStakeDirectory" />
            <xs:element name="getUnitLeaders" type="tns:getUnitLeaders" />
            <xs:element name="getUnitLeadersByAssignments" type="tns:getUnitLeadersByAssignments" />
            <xs:element name="getUnitLeadersByAssignmentsResponse" type="tns:getUnitLeadersByAssignmentsResponse" />
            <xs:element name="getUnitLeadersResponse" type="tns:getUnitLeadersResponse" />
            <xs:element name="getWardDirectory" type="tns:getWardDirectory" />
            <xs:element name="household" type="tns:WardFamily" />
            <xs:element name="householdGroup" type="tns:HouseholdGroup" />
            <xs:element name="setHouseholdLatLong" type="tns:setHouseholdLatLong" />
            <xs:element name="setHouseholdLatLongResponse" type="tns:setHouseholdLatLongResponse" />
            <xs:element name="setOptOut" type="tns:setOptOut" />
            <xs:element name="setOptOutList" type="tns:setOptOutList" />
            <xs:element name="setOptOutListResponse" type="tns:setOptOutListResponse" />
            <xs:element name="setOptOutResponse" type="tns:setOptOutResponse" />
            <xs:element name="updateGroupDetails" type="tns:updateGroupDetails" />
            <xs:element name="updateGroupDetailsResponse" type="tns:updateGroupDetailsResponse" />
            <xs:element name="validateMember" type="tns:validateMember" />
            <xs:element name="validateMembers" type="tns:validateMembers" />
            <xs:element name="validateMembersResponse" type="tns:validateMembersResponse" />
            <xs:complexType name="updateGroupDetails">
                <xs:sequence>
                    <xs:element minOccurs="0" name="groupId" type="xs:long" />
                    <xs:element minOccurs="0" name="name" type="xs:string" />
                    <xs:element minOccurs="0" name="description" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="updateGroupDetailsResponse">
                <xs:sequence>
                    <xs:element name="return" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getWardDirectory">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                    <xs:element minOccurs="0" name="excludeChildren" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="WardDirectoryResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="WardDirectoryResult" type="tns:WardDirectory" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="WardDirectory">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="families" type="tns:WardFamily" />
                    <xs:element minOccurs="0" name="wardLocaleInfo" type="tns:CmisLocaleInfo" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="WardFamily">
                <xs:sequence>
                    <xs:element form="qualified" name="familyName" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="address" nillable="true" type="tns:Address" />
                    <xs:element form="qualified" name="phone" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="spouse" nillable="true" type="tns:WardMember" />
                    <xs:element form="qualified" maxOccurs="unbounded" minOccurs="0" name="children" nillable="true" type="tns:WardMember" />
                    <xs:element form="qualified" name="head" nillable="true" type="tns:WardMember" />
                    <xs:element form="qualified" name="optOut" nillable="true" type="xs:boolean" />
                    <xs:element form="qualified" name="emailAddress" nillable="true" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Address">
                <xs:sequence>
                    <xs:element form="qualified" name="addr1" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="addr2" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="addr3" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="addr4" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="postal" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="latitude" nillable="true" type="xs:decimal" />
                    <xs:element form="qualified" name="longitude" nillable="true" type="xs:decimal" />
                    <xs:element form="qualified" name="locallyVerified" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="groupId" nillable="true" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="WardMember">
                <xs:complexContent>
                    <xs:extension base="tns:baseMember">
                        <xs:sequence>
                            <xs:element form="qualified" name="memberId" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="headOfHouseMemberId" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="name1" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="preferredName" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="phone" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="unitNbr" nillable="true" type="xs:long" />
                            <xs:element form="qualified" name="birthdate" nillable="true" type="xs:dateTime" />
                            <xs:element form="qualified" name="surname1" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="givenName1" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="name2" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="surname2" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="givenName2" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="gender" nillable="true" type="tns:gender" />
                            <xs:element form="qualified" name="endowmentDate" nillable="true" type="xs:dateTime" />
                            <xs:element form="qualified" name="priesthoodOffice" nillable="true" type="xs:int" />
                            <xs:element form="qualified" name="formattedName" nillable="true" type="xs:string" />
                        </xs:sequence>
                    </xs:extension>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="baseMember">
                <xs:sequence />
            </xs:complexType>
            <xs:complexType name="CmisLocaleInfo">
                <xs:sequence>
                    <xs:element form="qualified" name="localeId" type="xs:int" />
                    <xs:element form="qualified" name="languageCode" type="xs:int" />
                    <xs:element form="qualified" name="unitTypePlacement" type="xs:int" />
                    <xs:element form="qualified" name="ageStartValue" type="xs:int" />
                    <xs:element form="qualified" minOccurs="0" name="showNonMemberSpouseInDirectory" type="xs:boolean" />
                    <xs:element form="qualified" name="showAgeInDirectory" type="xs:int" />
                    <xs:element form="qualified" minOccurs="0" name="showNonFamilySurnameInDirectory" type="xs:boolean" />
                    <xs:element form="qualified" minOccurs="0" name="crossReferenceEntriesInDirectory" type="xs:boolean" />
                    <xs:element form="qualified" name="maidenNameDisplayMethod" type="xs:int" />
                    <xs:element form="qualified" name="abbrevDateDisplayFormat" type="xs:int" />
                    <xs:element form="qualified" name="fullDateDisplayFormat" type="xs:int" />
                    <xs:element form="qualified" name="formalDateDisplayFormat" type="xs:int" />
                    <xs:element form="qualified" name="directoryNameDisplayFormat" type="xs:int" />
                    <xs:element form="qualified" name="listNameDisplayFormat" type="xs:int" />
                    <xs:element form="qualified" name="certificateNameDisplayFormat" type="xs:int" />
                    <xs:element form="qualified" name="addressDisplayFormat" type="xs:int" />
                    <xs:element form="qualified" name="dualNameUsed" type="xs:int" />
                    <xs:element form="qualified" minOccurs="0" name="legalAddressUsed" type="xs:boolean" />
                    <xs:element form="qualified" name="familyNameSource" type="xs:int" />
                    <xs:element form="qualified" minOccurs="0" name="preferedNameUsed" type="xs:boolean" />
                    <xs:element form="qualified" minOccurs="0" name="name1Delimiter" type="xs:string" />
                    <xs:element form="qualified" minOccurs="0" name="name2Delimiter" type="xs:string" />
                    <xs:element form="qualified" minOccurs="0" name="name1WritingSystem" type="xs:int" />
                    <xs:element form="qualified" minOccurs="0" name="name2WritingSystem" type="xs:int" />
                    <xs:element form="qualified" name="sortNameUsed" type="xs:int" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getOrganizationByUnitType">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                    <xs:element minOccurs="0" name="orgType" type="tns:orgType" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getOrganizationByUnitTypeResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="tns:Organization" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Organization">
                <xs:sequence>
                    <xs:element form="qualified" name="unitNbr" type="xs:long" />
                    <xs:element form="qualified" name="organizationType" type="xs:string" />
                    <xs:element form="qualified" name="organizationTypeId" type="xs:int" />
                    <xs:element form="qualified" name="organizationName" type="xs:string" />
                    <xs:element form="qualified" name="parentUnitNbr" type="xs:long" />
                    <xs:element form="qualified" name="parentOrganizationTypeId" type="xs:int" />
                    <xs:element form="qualified" name="parentOrganizationType" type="xs:string" />
                    <xs:element form="qualified" name="parentOrganizationName" type="xs:string" />
                    <xs:element form="qualified" name="areaOrganizationId" type="xs:int" />
                    <xs:element form="qualified" name="areaOrganizationNumber" type="xs:long" />
                    <xs:element form="qualified" name="areaOrganizationName" type="xs:string" />
                    <xs:element form="qualified" minOccurs="0" name="billedUnitNo" nillable="true" type="xs:long" />
                    <xs:element form="qualified" minOccurs="0" name="missionUnitNo" nillable="true" type="xs:long" />
                    <xs:element form="qualified" minOccurs="0" name="msrOfficeUnitNo" nillable="true" type="xs:long" />
                    <xs:element form="qualified" minOccurs="0" name="templeUnitNo" nillable="true" type="xs:long" />
                    <xs:element form="qualified" minOccurs="0" name="welfareRegionUnitNo" nillable="true" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getMemberList">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                    <xs:element minOccurs="0" name="minAge" type="xs:int" />
                    <xs:element minOccurs="0" name="maxAge" type="xs:int" />
                    <xs:element minOccurs="0" name="onlyBaptized" type="xs:boolean" />
                    <xs:element minOccurs="0" name="gender" type="tns:gender" />
                    <xs:element minOccurs="0" name="nameFormatType" type="tns:nameFormatType" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getMemberListResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:SimpleMember" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="SimpleMember">
                <xs:complexContent>
                    <xs:extension base="tns:baseMember">
                        <xs:sequence>
                            <xs:element form="qualified" name="memberId" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="formattedName" nillable="true" type="xs:string" />
                            <xs:element form="qualified" name="birthdate" nillable="true" type="xs:dateTime" />
                            <xs:element form="qualified" name="priesthoodOffice" nillable="true" type="xs:int" />
                        </xs:sequence>
                    </xs:extension>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="getMembersOfParentUnit">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                    <xs:element minOccurs="0" name="minAge" type="xs:int" />
                    <xs:element minOccurs="0" name="maxAge" type="xs:int" />
                    <xs:element minOccurs="0" name="onlyBaptized" type="xs:boolean" />
                    <xs:element minOccurs="0" name="gender" type="tns:gender" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getMembersOfParentUnitResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:SimpleMember" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="setHouseholdLatLong">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="memberId" type="xs:string" />
                    <xs:element minOccurs="0" name="lat" type="xs:decimal" />
                    <xs:element minOccurs="0" name="long" type="xs:decimal" />
                    <xs:element minOccurs="0" name="verifiedLocally" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="setHouseholdLatLongResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getStakeDirectory">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                    <xs:element minOccurs="0" name="memberId" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="StakeDirectoryResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="WardDirectoryResult" type="tns:WardDirectory" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getGroupsByUnitNbr">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getGroupsByUnitNbrResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:HouseholdGroup" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="HouseholdGroup">
                <xs:sequence>
                    <xs:element form="qualified" name="id" nillable="true" type="xs:long" />
                    <xs:element form="qualified" name="name" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="description" nillable="true" type="xs:string" />
                    <xs:element form="qualified" name="count" nillable="true" type="xs:long" />
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="households" nillable="true" type="tns:WardFamily" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="validateMembers">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="memberId" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="validateMembersResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:ValidatedMember" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="ValidatedMember">
                <xs:sequence>
                    <xs:element form="qualified" name="member" type="tns:WardMember" />
                    <xs:element form="qualified" name="organization" type="tns:Organization" />
                    <xs:element form="qualified" maxOccurs="unbounded" minOccurs="0" name="assignments" type="tns:Assignment" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Assignment">
                <xs:sequence>
                    <xs:element form="qualified" name="organizationId" type="xs:long" />
                    <xs:element form="qualified" name="positionTypeId" type="xs:int" />
                    <xs:element form="qualified" name="positionName" type="xs:string" />
                    <xs:element form="qualified" name="positionOrgName" type="xs:string" />
                    <xs:element form="qualified" name="memberId" type="xs:string" />
                    <xs:element form="qualified" name="organization" type="tns:Organization" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getMemberListForMultipleUnits">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="unitNbrs" type="xs:long" />
                    <xs:element minOccurs="0" name="minAge" type="xs:int" />
                    <xs:element minOccurs="0" name="maxAge" type="xs:int" />
                    <xs:element minOccurs="0" name="onlyBaptized" type="xs:boolean" />
                    <xs:element minOccurs="0" name="gender" type="tns:gender" />
                    <xs:element minOccurs="0" name="nameFormatType" type="tns:nameFormatType" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getMemberListForMultipleUnitsResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:SimpleMember" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getChildUnits">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getChildUnitsResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ChildUnitsResult" type="tns:Organization" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getUnitLeaders">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getUnitLeadersResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:UnitLeader" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="UnitLeader">
                <xs:sequence>
                    <xs:element form="qualified" name="member" type="tns:WardMember" />
                    <xs:element form="qualified" minOccurs="0" name="assignment" type="tns:Assignment" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="setOptOutList">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="OptOutList" type="tns:OptOutData" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="OptOutData">
                <xs:sequence>
                    <xs:element form="qualified" name="headOfHouseholdId" type="xs:string" />
                    <xs:element form="qualified" name="optOut" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="setOptOutListResponse">
                <xs:sequence>
                    <xs:element name="return" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getOptOut">
                <xs:sequence>
                    <xs:element minOccurs="0" name="headOfHouseholdId" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getOptOutResponse">
                <xs:sequence>
                    <xs:element name="return" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getGroupById">
                <xs:sequence>
                    <xs:element minOccurs="0" name="groupId" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getGroupByIdResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="tns:HouseholdGroup" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getServiceInfo">
                <xs:sequence />
            </xs:complexType>
            <xs:complexType name="getServiceInfoResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="tns:serviceInfo" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="serviceInfo">
                <xs:sequence>
                    <xs:element minOccurs="0" name="buildVersion" type="xs:string" />
                    <xs:element minOccurs="0" name="serverName" type="xs:string" />
                    <xs:element minOccurs="0" name="startDate" type="xs:dateTime" />
                    <xs:element minOccurs="0" name="upTime" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getQuarterlyReport">
                <xs:sequence>
                    <xs:element minOccurs="0" name="memberId" type="xs:string" />
                    <xs:element name="unitNbr" type="xs:long" />
                    <xs:element name="year" type="xs:int" />
                    <xs:element name="quarter" type="xs:int" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getQuarterlyReportResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="xs:base64Binary" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getUnitLeadersByAssignments">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="positionIds" type="xs:int" />
                    <xs:element name="includeParentUnit" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getUnitLeadersByAssignmentsResponse">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:UnitLeader" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getCmisLocaleInfo">
                <xs:sequence>
                    <xs:element name="unitNbr" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="CmisLocaleInfoResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="CmisLocaleInfoResult" type="tns:CmisLocaleInfo" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="setOptOut">
                <xs:sequence>
                    <xs:element minOccurs="0" name="OptOut" type="tns:OptOutData" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="setOptOutResponse">
                <xs:sequence>
                    <xs:element name="return" type="xs:boolean" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getOrganizationByUnitNo">
                <xs:sequence>
                    <xs:element minOccurs="0" name="unitNbr" type="xs:long" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getOrganizationByUnitNoResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="tns:Organization" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="validateMember">
                <xs:sequence>
                    <xs:element minOccurs="0" name="memberId" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="ValidateMemberResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="tns:ValidatedMember" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getHouseholdById">
                <xs:sequence>
                    <xs:element minOccurs="0" name="headOfHouseMrn" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="getHouseholdByIdResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="tns:WardFamily" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="gender">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="MALE" />
                    <xs:enumeration value="FEMALE" />
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType name="orgType">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="BRANCH" />
                    <xs:enumeration value="WARD" />
                    <xs:enumeration value="STAKE" />
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType name="nameFormatType">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="List" />
                    <xs:enumeration value="Certificate" />
                    <xs:enumeration value="Directory" />
                    <xs:enumeration value="Simple" />
                </xs:restriction>
            </xs:simpleType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="getMemberListForMultipleUnits">
        <wsdl:part element="tns:getMemberListForMultipleUnits" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getServiceInfoResponse">
        <wsdl:part element="tns:getServiceInfoResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="updateGroupDetailsResponse">
        <wsdl:part element="tns:updateGroupDetailsResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getChildUnitsResponse">
        <wsdl:part element="tns:getChildUnitsResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getHouseholdByIdResponse">
        <wsdl:part element="tns:getHouseholdByIdResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getMemberListResponse">
        <wsdl:part element="tns:getMemberListResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getGroupByIdResponse">
        <wsdl:part element="tns:getGroupByIdResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="setOptOutResponse">
        <wsdl:part element="tns:setOptOutResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getUnitLeaders">
        <wsdl:part element="tns:getUnitLeaders" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="validateMemberResponse">
        <wsdl:part element="tns:ValidateMemberResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getMembersOfParentUnitResponse">
        <wsdl:part element="tns:getMembersOfParentUnitResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getQuarterlyReportResponse">
        <wsdl:part element="tns:getQuarterlyReportResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="setHouseholdLatLong">
        <wsdl:part element="tns:setHouseholdLatLong" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getMemberList">
        <wsdl:part element="tns:getMemberList" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="validateMembersResponse">
        <wsdl:part element="tns:validateMembersResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getStakeDirectoryResponse">
        <wsdl:part element="tns:StakeDirectoryResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getOrganizationByUnitType">
        <wsdl:part element="tns:getOrganizationByUnitType" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getGroupById">
        <wsdl:part element="tns:getGroupById" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getUnitLeadersResponse">
        <wsdl:part element="tns:getUnitLeadersResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="updateGroupDetails">
        <wsdl:part element="tns:updateGroupDetails" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getQuarterlyReport">
        <wsdl:part element="tns:getQuarterlyReport" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getOrganizationByUnitTypeResponse">
        <wsdl:part element="tns:getOrganizationByUnitTypeResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getHouseholdById">
        <wsdl:part element="tns:getHouseholdById" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getUnitLeadersByAssignments">
        <wsdl:part element="tns:getUnitLeadersByAssignments" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getStakeDirectory">
        <wsdl:part element="tns:getStakeDirectory" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="setHouseholdLatLongResponse">
        <wsdl:part element="tns:setHouseholdLatLongResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getWardDirectoryResponse">
        <wsdl:part element="tns:WardDirectoryResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="setOptOut">
        <wsdl:part element="tns:setOptOut" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getOptOut">
        <wsdl:part element="tns:getOptOut" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="validateMembers">
        <wsdl:part element="tns:validateMembers" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="validateMember">
        <wsdl:part element="tns:validateMember" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getOrganizationByUnitNoResponse">
        <wsdl:part element="tns:getOrganizationByUnitNoResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getGroupsByUnitNbr">
        <wsdl:part element="tns:getGroupsByUnitNbr" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getGroupsByUnitNbrResponse">
        <wsdl:part element="tns:getGroupsByUnitNbrResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="setOptOutListResponse">
        <wsdl:part element="tns:setOptOutListResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getOptOutResponse">
        <wsdl:part element="tns:getOptOutResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getUnitLeadersByAssignmentsResponse">
        <wsdl:part element="tns:getUnitLeadersByAssignmentsResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getServiceInfo">
        <wsdl:part element="tns:getServiceInfo" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getMemberListForMultipleUnitsResponse">
        <wsdl:part element="tns:getMemberListForMultipleUnitsResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getMembersOfParentUnit">
        <wsdl:part element="tns:getMembersOfParentUnit" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getOrganizationByUnitNo">
        <wsdl:part element="tns:getOrganizationByUnitNo" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getChildUnits">
        <wsdl:part element="tns:getChildUnits" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getCmisLocaleInfo">
        <wsdl:part element="tns:getCmisLocaleInfo" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="setOptOutList">
        <wsdl:part element="tns:setOptOutList" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getCmisLocaleInfoResponse">
        <wsdl:part element="tns:CmisLocaleInfoResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="getWardDirectory">
        <wsdl:part element="tns:getWardDirectory" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:portType name="MisApiServiceSoap">
        <wsdl:operation name="updateGroupDetails">
            <wsdl:input message="tns:updateGroupDetails" name="updateGroupDetails">
            </wsdl:input>
            <wsdl:output message="tns:updateGroupDetailsResponse" name="updateGroupDetailsResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getWardDirectory">
            <wsdl:input message="tns:getWardDirectory" name="getWardDirectory">
            </wsdl:input>
            <wsdl:output message="tns:getWardDirectoryResponse" name="getWardDirectoryResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getOrganizationByUnitType">
            <wsdl:input message="tns:getOrganizationByUnitType" name="getOrganizationByUnitType">
            </wsdl:input>
            <wsdl:output message="tns:getOrganizationByUnitTypeResponse" name="getOrganizationByUnitTypeResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMemberList">
            <wsdl:input message="tns:getMemberList" name="getMemberList">
            </wsdl:input>
            <wsdl:output message="tns:getMemberListResponse" name="getMemberListResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMembersOfParentUnit">
            <wsdl:input message="tns:getMembersOfParentUnit" name="getMembersOfParentUnit">
            </wsdl:input>
            <wsdl:output message="tns:getMembersOfParentUnitResponse" name="getMembersOfParentUnitResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="setHouseholdLatLong">
            <wsdl:input message="tns:setHouseholdLatLong" name="setHouseholdLatLong">
            </wsdl:input>
            <wsdl:output message="tns:setHouseholdLatLongResponse" name="setHouseholdLatLongResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getStakeDirectory">
            <wsdl:input message="tns:getStakeDirectory" name="getStakeDirectory">
            </wsdl:input>
            <wsdl:output message="tns:getStakeDirectoryResponse" name="getStakeDirectoryResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getGroupsByUnitNbr">
            <wsdl:input message="tns:getGroupsByUnitNbr" name="getGroupsByUnitNbr">
            </wsdl:input>
            <wsdl:output message="tns:getGroupsByUnitNbrResponse" name="getGroupsByUnitNbrResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="validateMembers">
            <wsdl:input message="tns:validateMembers" name="validateMembers">
            </wsdl:input>
            <wsdl:output message="tns:validateMembersResponse" name="validateMembersResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMemberListForMultipleUnits">
            <wsdl:input message="tns:getMemberListForMultipleUnits" name="getMemberListForMultipleUnits">
            </wsdl:input>
            <wsdl:output message="tns:getMemberListForMultipleUnitsResponse" name="getMemberListForMultipleUnitsResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getChildUnits">
            <wsdl:input message="tns:getChildUnits" name="getChildUnits">
            </wsdl:input>
            <wsdl:output message="tns:getChildUnitsResponse" name="getChildUnitsResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getUnitLeaders">
            <wsdl:input message="tns:getUnitLeaders" name="getUnitLeaders">
            </wsdl:input>
            <wsdl:output message="tns:getUnitLeadersResponse" name="getUnitLeadersResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="setOptOutList">
            <wsdl:input message="tns:setOptOutList" name="setOptOutList">
            </wsdl:input>
            <wsdl:output message="tns:setOptOutListResponse" name="setOptOutListResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getOptOut">
            <wsdl:input message="tns:getOptOut" name="getOptOut">
            </wsdl:input>
            <wsdl:output message="tns:getOptOutResponse" name="getOptOutResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getGroupById">
            <wsdl:input message="tns:getGroupById" name="getGroupById">
            </wsdl:input>
            <wsdl:output message="tns:getGroupByIdResponse" name="getGroupByIdResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getServiceInfo">
            <wsdl:input message="tns:getServiceInfo" name="getServiceInfo">
            </wsdl:input>
            <wsdl:output message="tns:getServiceInfoResponse" name="getServiceInfoResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getQuarterlyReport">
            <wsdl:input message="tns:getQuarterlyReport" name="getQuarterlyReport">
            </wsdl:input>
            <wsdl:output message="tns:getQuarterlyReportResponse" name="getQuarterlyReportResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getUnitLeadersByAssignments">
            <wsdl:input message="tns:getUnitLeadersByAssignments" name="getUnitLeadersByAssignments">
            </wsdl:input>
            <wsdl:output message="tns:getUnitLeadersByAssignmentsResponse" name="getUnitLeadersByAssignmentsResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getCmisLocaleInfo">
            <wsdl:input message="tns:getCmisLocaleInfo" name="getCmisLocaleInfo">
            </wsdl:input>
            <wsdl:output message="tns:getCmisLocaleInfoResponse" name="getCmisLocaleInfoResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="setOptOut">
            <wsdl:input message="tns:setOptOut" name="setOptOut">
            </wsdl:input>
            <wsdl:output message="tns:setOptOutResponse" name="setOptOutResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getOrganizationByUnitNo">
            <wsdl:input message="tns:getOrganizationByUnitNo" name="getOrganizationByUnitNo">
            </wsdl:input>
            <wsdl:output message="tns:getOrganizationByUnitNoResponse" name="getOrganizationByUnitNoResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="validateMember">
            <wsdl:input message="tns:validateMember" name="validateMember">
            </wsdl:input>
            <wsdl:output message="tns:validateMemberResponse" name="validateMemberResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getHouseholdById">
            <wsdl:input message="tns:getHouseholdById" name="getHouseholdById">
            </wsdl:input>
            <wsdl:output message="tns:getHouseholdByIdResponse" name="getHouseholdByIdResponse">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="MisServiceSoapBinding" type="tns:MisApiServiceSoap">
        <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="updateGroupDetails">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="updateGroupDetails">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="updateGroupDetailsResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getWardDirectory">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getWardDirectory">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getWardDirectoryResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMemberList">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getMemberList">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getMemberListResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getOrganizationByUnitType">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getOrganizationByUnitType">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getOrganizationByUnitTypeResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMembersOfParentUnit">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getMembersOfParentUnit">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getMembersOfParentUnitResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getGroupsByUnitNbr">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getGroupsByUnitNbr">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getGroupsByUnitNbrResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getStakeDirectory">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getStakeDirectory">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getStakeDirectoryResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="setHouseholdLatLong">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="setHouseholdLatLong">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="setHouseholdLatLongResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getMemberListForMultipleUnits">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getMemberListForMultipleUnits">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getMemberListForMultipleUnitsResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="validateMembers">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="validateMembers">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="validateMembersResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getChildUnits">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getChildUnits">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getChildUnitsResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getUnitLeaders">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getUnitLeaders">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getUnitLeadersResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="setOptOutList">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="setOptOutList">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="setOptOutListResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getGroupById">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getGroupById">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getGroupByIdResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getOptOut">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getOptOut">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getOptOutResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getServiceInfo">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getServiceInfo">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getServiceInfoResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getQuarterlyReport">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getQuarterlyReport">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getQuarterlyReportResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getUnitLeadersByAssignments">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getUnitLeadersByAssignments">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getUnitLeadersByAssignmentsResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getCmisLocaleInfo">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getCmisLocaleInfo">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getCmisLocaleInfoResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getOrganizationByUnitNo">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getOrganizationByUnitNo">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getOrganizationByUnitNoResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="setOptOut">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="setOptOut">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="setOptOutResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="validateMember">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="validateMember">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="validateMemberResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="getHouseholdById">
            <soap12:operation soapAction="" style="document" />
            <wsdl:input name="getHouseholdById">
                <soap12:body use="literal" />
            </wsdl:input>
            <wsdl:output name="getHouseholdByIdResponse">
                <soap12:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="MisService">
        <wsdl:port binding="tns:MisServiceSoapBinding" name="MisServicePort">
            <soap:address location="http://tech.lds.org/NGIServices/Services/MisService" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>
This page was last modified on 31 March 2010, at 00:59. This page has been accessed 12,508 times.

Note: Content found in this wiki may not always reflect official Church information. See Terms of Use.