Table of Contents

Sample Integration

A sample web integration is bundled with Appraise-It Pro.

The sample web page is generated on first run and is located at Documents/My Appraise-It/Data/Web Development.

The sample web page can be modified; changes will be reflected after closing and reopening the integration web browser from the Development tab.

If needed, you can revert the sample web page by deleting Documents/My Appraise-It/Data/Web Development and Documents/My Appraise-It/Data/DataFolder.xml, then restarting Appraise-It Pro.

For quick reference, a condensed version of the sample web page is presented below.

<html xmlns="http://www.w3.org/1999/xhtml">

<!-- IntegrationSampleJavascriptObject
getOrderInformationFromAppraiseItPro - returns (string, string) containing a unique order/report id and the exsiting report data in RPTI XML.
getIsDynamicReport - returns boolean indicating whether or not the open report is a dynamic (UAD 3.6) report.
sendRptiDownloadUrlToAppraiseItPro - sends the url to download the full RPTI package back to Appraise-It Pro.
sendMismo36DownloadUrlToAppraiseItPro - sends the url to download the full RPTI package back to Appraise-It Pro.
sendRptiXmlToAppraiseItPro - sends the RPTI XML back to Appraise-It Pro (no images or PDFs).-->

<head>
    <title>Webbrowser Integration Demo</title>

    <script>

        // Initialize CefSharp and connect to IntegrationSampleJavascriptObject.
        async function InitializeCefSharp() {
            await CefSharp.BindObjectAsync("IntegrationSampleJavascriptObject");
        }

        async function sendMismo36DownloadUrlToAppraiseItPro() {

            isDynamicReport = await IntegrationSampleJavascriptObject.getIsDynamicReport();

            if (isDynamicReport) {
                // Dynamic Report
                result = 'https://downloads.sfrep.com/resources/UAD_3.6_SF1.zip';
            }
            else {
                // Static Report
                alert("MISMO 2.6 import is not supported by the browser integration");
            }

            await IntegrationSampleJavascriptObject.sendMismo36DownloadUrlToAppraiseItPro(result);

        }

        async function sendRptiDownloadUrlToAppraiseItPro() {

            isDynamicReport = await IntegrationSampleJavascriptObject.getIsDynamicReport();

            if (isDynamicReport) {
                // Dynamic Report
                result = 'https://api.dev.sfrep.com/resources/DynamicSF1Sample.rpti'               
                
            }
            else {
                // Static Report
                result = 'https://api.dev.sfrep.com/resources/StaticSample.rpti'
            }

            await IntegrationSampleJavascriptObject.sendRptiDownloadUrlToAppraiseItPro(result);

        }

        async function sendRptiXmlToAppraiseItPro() {

            isDynamicReport = await IntegrationSampleJavascriptObject.getIsDynamicReport();

            if (isDynamicReport) {
                // Dynamic Report
                result = '<?xml version="1.0" encoding="utf-16"?><Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Application VendorName="SFREP" ProductName="Appraise-It" ProductVersion="3.5.5" AixmlVersion="1.5"/><Geocoding/><Forms><DynamicForm Id="FNMA-URAR-0924"/><DynamicForm Id="AutomaticAdjustments-UAD2"/><DynamicForm Id="RatingDefinitions-UAD2"/></Forms><DynamicFields>...</DynamicFields></Report>'
            }
            else {
                // Static Report
                result = '<?xml version="1.0" encoding="utf-16"?><Report xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Application VendorName="SFREP" ProductName="Appraise-It" ProductVersion="2.1.0" AixmlVersion="1.5" /><Geocoding>...</Geocoding><Forms>...</Forms></Report>';

            }

            await IntegrationSampleJavascriptObject.sendRptiXmlToAppraiseItPro(result);

        }

        async function getOrderInformationFromAppraiseItPro() {
            order = await IntegrationSampleJavascriptObject.getOrderInformationFromAppraiseItPro();

            const parser = new DOMParser();
            const xmlDoc = parser.parseFromString(order.Item2, "text/xml");

            isDynamicReport = await IntegrationSampleJavascriptObject.getIsDynamicReport();
            if (isDynamicReport) {
                streetAddress = xmlDoc.evaluate("//Report/DynamicFields/ReportFields/RowGroups/RowGroup/Fields/DynamicTextField[@Id='StreetAddress']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                city = xmlDoc.evaluate("//Report/DynamicFields/ReportFields/RowGroups/RowGroup/Fields/DynamicTextField[@Id='City']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                state = xmlDoc.evaluate("//Report/DynamicFields/ReportFields/RowGroups/RowGroup/Fields/DynamicTextField[@Id='State']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                zip = xmlDoc.evaluate("//Report/DynamicFields/ReportFields/RowGroups/RowGroup/Fields/DynamicTextField[@Id='ZipCode']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                message = "Order Id: " + order.Item1 + "\nAddress :\n" + streetAddress + ", " + city + ", " + state + " " + zip;

                alert(message);
            }
            else {

                streetAddress = xmlDoc.evaluate("//Report/Forms/Form/Fields/TextField[@Id='StreetAddress']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                city = xmlDoc.evaluate("//Report/Forms/Form/Fields/TextField[@Id='City']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                state = xmlDoc.evaluate("//Report/Forms/Form/Fields/TextField[@Id='State']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                zip = xmlDoc.evaluate("//Report/Forms/Form/Fields/TextField[@Id='ZipCode']/@Data", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value;
                message = "Order Id: " + order.Item1 + "\nAddress :\n" + streetAddress + ", " + city + ", " + state + " " + zip;

                alert(message);
            }

        }

        InitializeCefSharp();

    </script>
</head>
<body>
    <p>
        This page has been loaded from the user's Appraise-It Pro Data folder.
        Any modifications to this file will reflected upon re-launching the sample browser.
        <br />
        <br />
        The target page of this browser can be changed by adding or modifying the following value in Window's registry.
        HKEY_CURRENT_USER\Software\SFREP\Appraise-It Pro\Development\BrowserIntegrationUrl
        <br />
        <br />
        Get information from Appraise-It Pro and display the order id and subject address. The DevTools console can be used to view additional report data in the order variable.
        <br />
        <button onclick="getOrderInformationFromAppraiseItPro()">Get Order Information</button>
        <br />
        <br />
        Download a MISMO 3.6 (UAD subchema) zip package file from the provided link and import it into Appraise-It Pro.
        <br />
        <button onclick="sendMismo36DownloadUrlToAppraiseItPro()">Download MISMO (UAD) 3.6</button>
        <br />
        <br />
        Download a sample RPTI zip file and import it into Appraise-It Pro.
        <br />
        <button onclick="sendRptiDownloadUrlToAppraiseItPro()">Download RPTI</button>
        <br />	<br />
        Import sample RPTI text data into Appraise-It Pro using XML.
        <br />
        <button onclick="sendRptiXmlToAppraiseItPro()">Import RPTI XML</button>
        <br />
        <br />
        Documentation for the the RPTI specification can be found here: <a href="https://api.sfrep.com/rpti/aixml_spec.html">https://api.sfrep.com/rpti/aixml_spec.html</a>
    </p>
    <br />

</body>
</html>