cancel
Showing results for 
Search instead for 
Did you mean: 

Problem with Calculated Element

former_member540174
Participant
0 Kudos

I have added a node to my web dynpro. The purpose of this node is to hold a switch that I toggle based on the date range of the data being shown. I've missed something as the element is ALWAYS set to the current week. Where did I go wrong?


  public static void wdDoModifyView(IPrivateDetailView wdThis, IPrivateDetailView.IContextNode wdContext, com.sap.tc.webdynpro.progmodel.api.IWDView view, boolean firstTime)
  {
    //@@begin wdDoModifyView
    if (firstTime)
    {
		ICalculatedValuesElement elem = wdContext.createCalculatedValuesElement();
		wdContext.nodeCalculatedValues().bind(elem);
		elem.setWeekType(WeekToProcess.CURRENT_WEEK);	
    }
    BuildView(wdContext.currentCalculatedValuesElement().getWeekType(), wdThis, wdContext, view);
    IWDMessageManager msgMgr = wdThis.wdGetAPI().getComponent().getMessageManager();
    java.util.Date mDate = new java.util.Date();
    msgMgr.reportWarning("Do Modify View " + mDate + " Date type " + String.valueOf(wdContext.currentCalculatedValuesElement().getWeekType()));
    //@@end
  }

  //@@begin javadoc:onActionPriorWeek(ServerEvent)
  /** Declared validating event handler. */
  //@@end
  public void onActionPriorWeek(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent )
  {
    //@@begin onActionPriorWeek(ServerEvent)
	wdContext.currentCalculatedValuesElement().setWeekType(WeekToProcess.PRIOR_WEEK);
	IWDMessageManager msgMgr = wdThis.wdGetAPI().getComponent().getMessageManager();
	java.util.Date mDate = new java.util.Date();
	msgMgr.reportWarning("Prior Week " + mDate + " calc value=" + String.valueOf(wdContext.currentCalculatedValuesElement().getWeekType()) );
	wdContext.currentCalculatedValuesElement().setWeekType(WeekToProcess.CURRENT_WEEK);
	msgMgr.reportWarning("Prior Week " + mDate + " calc value=" + String.valueOf(wdContext.currentCalculatedValuesElement().getWeekType()) );

	GregorianCalendar priorWeekDate = new GregorianCalendar();
	priorWeekDate.setTime(new java.util.Date());
	priorWeekDate.add(GregorianCalendar.DATE,-7);
	wdThis.wdGetEmployeeTimeVerificatioinCustController().getEmployeeTimeData(priorWeekDate.getTime());
    //@@end
  }

  //@@begin javadoc:onActionCurrentWeek(ServerEvent)
  /** Declared validating event handler. */
  //@@end
  public void onActionCurrentWeek(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent )
  {
    //@@begin onActionCurrentWeek(ServerEvent)
	wdContext.currentCalculatedValuesElement().setWeekType(WeekToProcess.CURRENT_WEEK);    
	IWDMessageManager msgMgr = wdThis.wdGetAPI().getComponent().getMessageManager();
	java.util.Date mDate = new java.util.Date();
	msgMgr.reportWarning("Current Week "+ mDate);
	wdThis.wdGetEmployeeTimeVerificatioinCustController().getEmployeeTimeData(new java.util.Date());
    //BuildView(WeekToProcess.CURRENT_WEEK, wdThis, wdContext, view);
  //  wdThis.wdFirePlugDetailViewOut();
   
    //@@end
  }

   //@@begin others
	private static void BuildView(short weekToProcess,IPrivateDetailView wdThis, IPrivateDetailView.IContextNode wdContext, com.sap.tc.webdynpro.progmodel.api.IWDView view)
	{
		IWDMessageManager msgMgr = wdThis.wdGetAPI().getComponent().getMessageManager();
		java.util.Date mDate = new java.util.Date();
	msgMgr.reportWarning("BuildView " + mDate);
	if (wdContext.nodeCalculatedValues().currentCalculatedValuesElement().getWeekType() == WeekToProcess.CURRENT_WEEK)
		{
			msgMgr.reportWarning("Current Week Type");
			IWDButton currentWeekButton = (IWDButton) view.getElement("CurrentWeek");
			IWDButton priorWeekButton = (IWDButton) view.getElement("PriorWeek");
			currentWeekButton.setEnabled(false);
			priorWeekButton.setEnabled(true);
			
		}
		else
		{
			msgMgr.reportWarning("Prior Week Type");
			IWDButton currentWeekButton = (IWDButton) view.getElement("CurrentWeek");
			IWDButton priorWeekButton = (IWDButton) view.getElement("PriorWeek");
			currentWeekButton.setEnabled(true);
			priorWeekButton.setEnabled(false);
		}
		IWDButton verifyButton = (IWDButton) view.getElement("Verify_0");
		verifyButton.setEnabled(false);
                           .... other code
}

Regards,

Diane

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos
  public void onActionPriorWeek(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent )
  {
    //@@begin onActionPriorWeek(ServerEvent)
	wdContext.currentCalculatedValuesElement().setWeekType(WeekToProcess.PRIOR_WEEK);
	IWDMessageManager msgMgr = wdThis.wdGetAPI().getComponent().getMessageManager();
	java.util.Date mDate = new java.util.Date();
	msgMgr.reportWarning("Prior Week " + mDate + " calc value=" + String.valueOf(wdContext.currentCalculatedValuesElement().getWeekType()) );
	
  /* WHY THIS? */
wdContext.currentCalculatedValuesElement().setWeekType(WeekToProcess.CURRENT_WEEK);
	
msgMgr.reportWarning("Prior Week " + mDate + " calc value=" + String.valueOf(wdContext.currentCalculatedValuesElement().getWeekType()) );
 
	GregorianCalendar priorWeekDate = new GregorianCalendar();
	priorWeekDate.setTime(new java.util.Date());
	priorWeekDate.add(GregorianCalendar.DATE,-7);
	wdThis.wdGetEmployeeTimeVerificatioinCustController().getEmployeeTimeData(priorWeekDate.getTime());
    //@@end
  }

Armin

former_member540174
Participant
0 Kudos

Thought you'd found it - "couldn't see the forest for the trees" - deleted the line but it still isn't working.

The messages state that the value of the element is always "0".

Message after prior button click

Prior Week Mon Nov 19 08:55:06 CST 2007 calc value=0

BuildView Mon Nov 19 08:55:06 CST 2007

Current Week Type

Weekly Hours not signed

Do Modify View Mon Nov 19 08:55:06 CST 2007 Date type 0

Message was edited by:

Diane Fuller

Former Member
0 Kudos

Seems like you don't like using the debugger Better debug the application instead of adding those message manager output lines.

Armin

former_member540174
Participant
0 Kudos

I love debuggers.....with this project (and this product) I'm not allowed to use the debugger thus I'm stuck using message manager. I've brought it up to our team but they stand firm no debugger for me.

Do you have any assistance in how the elements are set? I'd hoped that by setting the element value in the button click the modify view would then be able to utilze the value. It doesn't seem to be changing.

Diane

Former Member
0 Kudos

The approach to set the context attribute value in the action handler and query it inside wdDoModifyView() is generally ok. But I would add an additional boolean context attribute "rebuildView" which would be set in the action handler if the week perspective really has been changed.

In wdDoModifyView(), rebuild the view only if the "rebuildView" flag is set:

wdDoModifyView()
{
  if ( wdContext.currentContextElement().rebuildView() )
  {
     /* Rebuild view depending on current week perspective */
     ...
     /* Reset flag */
     wdContext.currentContextElement().setRebuildView(false);
  }
}

Armin

former_member540174
Participant
0 Kudos

It was something to do with the datatype I created. I changed it over to a boolean and it works wonderfully. I need to read up more on dictionary data types.

Thank you,

Diane

Answers (0)