Click here to Skip to main content
15,886,795 members
Articles / Web Development / ASP.NET

Using Silverlight in Enterprise: RAD of User Friendly Database Access

Rate me:
Please Sign up or sign in to vote.
4.81/5 (19 votes)
31 Jul 2009CPOL8 min read 58.1K   7K   81  
This article introduces FulcrumWeb RAD Framework - A Silverlight UI Engine to build user friendly database driven applications
/********************************************************************
 *  FulcrumWeb RAD Framework - Fulcrum of your business             *
 *  Copyright (c) 2002-2009 FulcrumWeb, ALL RIGHTS RESERVED         *
 *                                                                  *
 *  THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED      *
 *  FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE        *
 *  COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE       *
 *  AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT  *
 *  AND PERMISSION FROM FULCRUMWEB. CONSULT THE END USER LICENSE    *
 *  AGREEMENT FOR INFORMATION ON ADDITIONAL RESTRICTIONS.           *
 ********************************************************************/

namespace Framework.Silverlight.Client
{
  /// <summary>
  /// Default command handler for some standard commands.
  /// </summary>
  public class CxCommandHandler : IxCommandHandler
  {
    private readonly CxAppContext m_context = CxAppContext.Instance;
    //-------------------------------------------------------------------------
    /// <summary>
    /// Constructor.
    /// </summary>
    public CxCommandHandler()
    {
    }
    //-------------------------------------------------------------------------
    /// <summary>
    /// Executes command for the particular entity.
    /// </summary>
    /// <param name="commandController">command controller invoked the method</param>
    /// <param name="commandData">prepared command data</param>
    /// <returns>command execution result</returns>
    virtual public void ExecuteCommand(
      CxCommandController commandController,
      CxCommandData commandData)
    {
      switch (commandData.Command.Id)
      {
        case CxCommandIDs.DELETE:
          ExecuteDeleteCommand(commandController, commandData);
          break;
        case CxCommandIDs.EDIT:
          ExecuteEditCommand(commandController, commandData);
          break;
        case CxCommandIDs.VIEW:
          ExecuteViewCommand(commandController, commandData);
          break;
        case CxCommandIDs.NEW:
          ExecuteNewCommand(commandController, commandData);
          break;
        default:
          return;
      }

    }

    //-------------------------------------------------------------------------
    /// <summary>
    /// Executes command for the entity batch.
    /// </summary>
    /// <param name="commandController">command controller invoked the method</param>
    /// <param name="commandData">original command data</param>
    /// <returns>command execution result</returns>
    virtual public void ExecuteBatch(
      CxCommandController commandController,
      CxCommandData commandData)
    {
     // switch (commandData.Command.Id)
     // {
        //case CxCommandIDs.CUT:
        //    return ExecuteCopyCommandBatch(commandController, commandData, true);
        //case CxCommandIDs.COPY:
        //    return ExecuteCopyCommandBatch(commandController, commandData, false);
   //   }

    }

    //-------------------------------------------------------------------------
    /// <summary>
    /// Executes delete command.
    /// </summary>
    virtual protected void ExecuteDeleteCommand(
      CxCommandController commandController,
      CxCommandData commandData)
    {
    }

    //----------------------------------------------------------------------------

    /// <summary>
    /// Executes open command.
    /// </summary>
    virtual protected void ExecuteEditCommand(
      CxCommandController commandController,
      CxCommandData commandData)
    {
      OpenDetailsFrame(commandController, commandData, NxOpenMode.Edit);
    }

    //----------------------------------------------------------------------------
    /// <summary>
    /// Executes view command.
    /// </summary>
    virtual protected void ExecuteViewCommand(
      CxCommandController commandController,
      CxCommandData commandData)
    {
      OpenDetailsFrame(commandController, commandData, NxOpenMode.View);
    }

    //----------------------------------------------------------------------------
    /// <summary>
    /// Executes new command.
    /// </summary>
    virtual protected void ExecuteNewCommand(
      CxCommandController commandController,
      CxCommandData commandData)
    {

      if (commandController.Frame.OpenMode == NxOpenMode.ChildNew &&
          commandController.Frame.CurrentEntity == null &&
          commandController.Frame.ParentFrame.CurrentEntity.IsCommited == false)
      {
        CxMessageBox<CxBaseFrame> mb = new CxMessageBox<CxBaseFrame>();
        mb.DialogResultChanged += IsNotSavedDialog_DialogResultChanged;
        mb.Context = commandController.Frame.ParentFrame;
        mb.Show(
          "The parent entity is not saved.\n" +
          "To create child entity you have to save parent entity.\n" +
          "Do you want to save it right now?",
          "Not saved entity",
          NxDialogButtons.YesNo,
          NxMessageBoxIcon.Information);
        return;
      }

      CxEntityUsage entityUsage = commandData.EntityUsage;
      CxAutoLayoutFrame frame = CxTypeActivator.GetDetailsFrame(entityUsage.EntityMetadata.EditFrameId);

      CxFrameData frameData = new CxFrameData();
      frameData.EntityUsageId = entityUsage.EntityMetadata.Id;
      if(!string.IsNullOrEmpty(commandData.Command.EntityUsageId))
      {
        frameData.EntityUsageId = commandData.Command.EntityUsageId;
      }
      frameData.OpenMode = NxOpenMode.New;
      frameData.ParentEntity = commandData.EditController.Frame.ParentEntity;
      frameData.ParentEntityUsageId = commandData.EditController.Frame.ParentEntityUsageId;
      frameData.ParentPks = commandData.EditController.Frame.ParentPrimaryKeys;
      frame.InitFrame(frameData);
      frame.SelectedEntities.Add(commandData.CurrentEntity);

      CxCommandClickNavigation navigation = new CxCommandClickNavigation();
      navigation.BeginFrameShowing(frame, commandController, commandData);

    }

    //----------------------------------------------------------------------------
    /// <summary>
    /// Handles Framework.Silverlight.Client.CxDialog.DialogResultChanged event.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void IsNotSavedDialog_DialogResultChanged(object sender, CxDialogResultChangedEventArgs e)
    {
      if(e.DialogResult == NxDialogResult.YES)
      {
        CxMessageBox<CxBaseFrame> dialog = (CxMessageBox<CxBaseFrame>)sender;
        dialog.Context.BeginSaveData();
      }
    }

    //-------------------------------------------------------------------------
    /// <summary>
    /// Opens and initializes details frame for commands such as 'Edit', 'View' etc.
    /// </summary>
    private void OpenDetailsFrame(CxCommandController commandController,
      CxCommandData commandData, NxOpenMode openMode)
    {
      CxEntityUsage entityUsage = commandData.EntityUsage;
      if (commandData.CurrentEntity != null)
      {
        CxAutoLayoutFrame frame = CxTypeActivator.GetDetailsFrame(entityUsage.EntityMetadata.EditFrameId);

        CxFrameData frameData = new CxFrameData();
        frameData.EntityUsageId = entityUsage.EntityMetadata.Id;
        if(!string.IsNullOrEmpty(commandData.Command.EntityUsageId))
        {
          frameData.EntityUsageId = commandData.Command.EntityUsageId;
        }
        frameData.CurrentEntity = commandData.CurrentEntity;
        frameData.ParentEntity = commandData.EditController.Frame.ParentEntity;
        frameData.ParentEntityUsageId = commandData.EditController.Frame.ParentEntityUsageId;
        frameData.ParentPks = commandData.EditController.Frame.ParentPrimaryKeys;
        frameData.OpenMode = openMode;
        frame.InitFrame(frameData);
        frame.SelectedEntities.Add(commandData.CurrentEntity);

        CxCommandClickNavigation navigation = new CxCommandClickNavigation();
        navigation.BeginFrameShowing(frame, commandController, commandData);
      }
    }

 
  }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Ukraine Ukraine
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions