The subject line in the Send Now editor can be modified using the Strategy Web SDK by creating an add-on directly on the rwd (Report Writing Documents) page or on the report (Report Execution) page using the postCollectData method.
The beans that will be needed are the following: SubscriptionEditorBean, SubscriptionBean, and the RWBean (or the ReportBean). The SubscriptionBean is contained within the SubscriptionEditorBean. It is important to call the SubscriptionEditorBean's isOpen method before attempting to adjust the email subject otherwise a NullPointerException will be thrown. More importantly, there are several SubscriptionEditorBeans contained on the page. As shown in KB38524, it will be necessary to iterate through all of the beans on the page and retrieve the specific SubscriptionEditorBean needed for this customization.
Finally, the RWBean (or the ReportBean) can be used to save the original subject before setting a new value in the SubscriptionBean. The best method to use for this purpose would be the getObjectName method. As previously noted, KB38524 shows an example of manipulating the subject using the SubscriptionBean.
Below is sample code for completing this add-on:
/**
* Strategy SDK Sample
*
* Copyright © 2011 Strategy Incorporated. All Rights Reserved.
*
* Strategy MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
* SUITABILITY OF THIS SAMPLE CODE, EITHER EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Strategy SHALL NOT
* BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
* MODIFYING OR DISTRIBUTING THIS SAMPLE CODE OR ITS DERIVATIVES.
*
*
*/
package com.Strategy.sdk.examples.addons;
import com.Strategy.web.app.addons.AbstractAppAddOn;
import com.Strategy.web.app.beans.PageComponent;
import com.Strategy.web.app.beans.SubscriptionEditorBean;
import com.Strategy.web.beans.RWBean;
import com.Strategy.web.beans.SubscriptionBean;
import com.Strategy.web.beans.WebBeanException;
import com.Strategy.web.beans.WebComponent;
import com.Strategy.web.objects.WebSubscription;
import com.Strategy.web.objects.WebSubscriptionDeliveryModeEmailProperties;
public class ModifyEmailSubject extends AbstractAppAddOn {
private SubscriptionEditorBean seb;
private SubscriptionBean sb;
private RWBean rwb;
public String getAddOnDescription() {
return "This add-on will add custom text into the subject field.";
}
public void postCollectData(PageComponent page) {
System.out.println("Method Called: postCollectData");
seb = getSubscriptionEditorBean(page);
rwb = (RWBean) page.getChildByClass(RWBean.class);
if (seb.isOpen()) {
try {
sb = seb.getSubscriptionBean();
WebSubscription ws = sb.getSubscription();
WebSubscriptionDeliveryModeEmailProperties emailProp = (WebSubscriptionDeliveryModeEmailProperties) ws.getDeliveryMode();
// Default subject is the report name
String prevSubject = rwb.getObjectName();
emailProp.setEmailSubject(" "+prevSubject);
sb.collectData();
} catch (WebBeanException e) {
e.printStackTrace();
}
}
return;
}
private SubscriptionEditorBean getSubscriptionEditorBean(WebComponent wc) {
SubscriptionEditorBean result = null;
// There are multiple SubscriptionEditorBeans on the page; recursively iterate through all of the page beans to retrieve the correct bean
if (wc instanceof SubscriptionEditorBean) {
if (wc.getName().equals("ncSendNow")) result = (SubscriptionEditorBean) wc;
} else {
for (int i = 0; i < wc.getChildCount(); i++) {
result = getSubscriptionEditorBean(wc.getChild(i));
if (result != null) break;
}
}
return result;
}
}