Bitwyse1
Bitwyse1

Reputation: 339

Button with ssjs and csjs not openning new window in csjs

I have a button when clicked, updates the backend document then opens a new windows to another website passing in some information.

It works just fine in Mozilla v27 however, testing it in IE 10 or 11 and Chrome, it doesn't work. UGH. Can anyone suggest a better way to handle this so it works in all browsers. . . Updated: All Code.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.resources>
<xp:script src="js/jquery-1.8.2.min.js" clientSide="true" />
<xp:script src="js/jquery-ui-1.9.min.js" clientSide="true" />
</xp:this.resources>
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[
function linkToEstatementsSignup() 
{
var url = " https://ebppdemo.documentdna.com/lieberman/login.aspx?uid=#{javascript:userOccupantProfile.gettenant_id()}" +
"&fn=#{javascript:userOccupantProfile.getFirstName()}" +  
"&ln=#{javascript:userOccupantProfile.getLastName()}" +
"&em=#{javascript:userOccupantProfile.getEmail()}" +  
"&ph=#{javascript:userOccupantProfile.getDayPhone()}" +
"&acct=#{javascript:userOccupantProfile.getAccountNumber()}";

alert( url );

window.open( url );
}
]]>
</xp:this.value>
</xp:scriptBlock>

<xe:navigator id="navigator1">
<xe:this.treeNodes>
<xe:basicContainerNode label="Register for e-Statements"
submitValue="RegisterForEstatements" enabled="true">
<xe:this.rendered><![CDATA[#{javascript:myEStatements.renderStatements()}]]>
</xe:this.rendered>
</xe:basicContainerNode>
</xe:this.treeNodes>
<xp:eventHandler event="onItemClick" submit="true"
refreshMode="partial" refreshId="navigator1">
<xp:this.action><![CDATA[#{javascript:
if( context.getSubmittedValue() == "RegisterForEstatements" )
{
sessionScope.put( "dialogAcceptEStatementTitle", "Accept e-Statements!" );
var dialogAcceptEstatements = getComponent( "dlgAcceptEStatements" );
dialogAcceptEstatements.show();
return "";
}       

sessionScope.put( "dialogOopsTitle", "Oopps!" );
sessionScope.put( "dialogOopsMessage", "\nThis Feature Has Not Been Enabled Yet!" );
var dialogOops = getComponent( "dialogOops" );
dialogOops.show();
return "";

}]]>
</xp:this.action>
</xp:eventHandler>
</xe:navigator>
</xp:view>


<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.resources>
<xp:script src="js/jquery-1.8.2.min.js" clientSide="true" />
<xp:script src="js/jquery-ui-1.9.min.js" clientSide="true" />
<xp:script src="js/jquery.panelgallery-2.0.0.min.js"
clientSide="true" />
<xp:styleSheet href="/eStarTheme.css" />
<xp:script src="/jsDominoGlobals.jss" clientSide="false"></xp:script>
</xp:this.resources>
<xp:this.data>
<xp:dominoDocument var="selectedOccupant"
databaseName="star/lms.nsf" formName="fOccupant" action="editDocument">
<xp:this.documentId><![CDATA[#{javascript:return sessionScope.get("OccupantUNID");}]]></xp:this.documentId>
</xp:dominoDocument>
</xp:this.data>

<xe:dialog id="dlgAcceptEStatements"
title="#{javascript:sessionScope.dialogAcceptEStatementTitle;}">
<xp:panel>
<xp:table>
<xp:tr>
<xp:td>
<xp:label value="Electronic Acceptance" id="acceptEStatementsTitle_Label1"
for="acceptEStatementsTitle1">
</xp:label>
</xp:td>
<xp:td>
<xp:div styleClass="lotusMessage lotusInfo" role="alert">
<xp:inputTextarea id="acceptedMessage" readonly="true"
style="width:auto">
<xp:this.value><![CDATA[#{javascript:myEStatements.getEStatementAcceptMessage()}]]></xp:this.value>
</xp:inputTextarea>
</xp:div>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:label value="Check if you accept the verbiage above"
id="acceptEStatementsURL_Label1" for="acceptEStatementsAccept1">
</xp:label>
</xp:td>
<xp:td>
<xp:checkBox text="" id="acceptEStatementsChecked"
value="#{selectedOccupant.EStatementsAccepted}"></xp:checkBox>
</xp:td>

</xp:tr>
<xp:tr>
<xp:td>
</xp:td>
<xp:td>
<xp:button value="Save" id="btnSave">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:
selectedOccupant.replaceItemValue( "EStatementsAccepted", getComponent( "acceptEStatementsChecked" ).getValue() );
selectedOccupant.replaceItemValue( "EStatementsAcceptMessage", getComponent( "acceptedMessage" ).getValue() );
selectedOccupant.replaceItemValue( "EStatementsAcceptedDate", new Date() );
selectedOccupant.save();
getComponent( "dlgAcceptEStatements" ).hide();
}]]></xp:this.action>
<xp:this.onComplete>
<![CDATA[linkToEstatementsSignup();]]>
</xp:this.onComplete>
</xp:eventHandler>
</xp:button>
<xp:button value="Cancel" id="btnCancel">
<xp:eventHandler event="onclick"
submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:getComponent( "dlgAcceptEStatements" ).hide();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
</xe:dialog>
</xp:view>

Upvotes: 0

Views: 435

Answers (1)

Per Henrik Lausten
Per Henrik Lausten

Reputation: 21709

Try starting the clientside code in the onComplete event:

<xp:button id="button29" value="button29">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="dlgAcceptEStatements">
        <xp:this.action><![CDATA[#{javascript:
            selectedOccupant.replaceItemValue( "EStatementsAccepted", getComponent("acceptEStatementsChecked" ).getValue() );
            selectedOccupant.replaceItemValue( "EStatementsAcceptMessage", getComponent( "acceptedMessage" ).getValue() );
            selectedOccupant.replaceItemValue( "EStatementsAcceptedDate", new Date() );
            selectedOccupant.save();
            getComponent( "dlgAcceptEStatements" ).hide();
        }]]></xp:this.action>
        <xp:this.onComplete>
            <![CDATA[linkToEstatementsSignup();]]>
        </xp:this.onComplete>
    </xp:eventHandler>
</xp:button

Bonus: if acceptEStatementsChecked and acceptedMessage are fields in your datasource, then consider using the datasource getValue() method instead of the component getValue() method (e.g. document1.getValue("acceptEStatementsChecked") instead of getComponent("acceptEStatementsChecked" ).getValue()).

Upvotes: 1

Related Questions