home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / software / pelne / optionp / mts4.cab / Account.VJ_Account_MoveMoney.java < prev    next >
Text File  |  1997-11-14  |  4KB  |  122 lines

  1. // Filename: MoveMoney.java
  2. //
  3. // Description: Declaration of MoveMoney
  4. //
  5. // This file is provided as part of the Microsoft Transaction Server
  6. // Software Development Kit
  7. //
  8. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT 
  9. // WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 
  10. // INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES 
  11. // OF MERCHANTABILITY AND/OR FITNESS FOR A  PARTICULAR 
  12. // PURPOSE.
  13. //
  14. // Copyright (C) 1997 Microsoft Corporation, All rights reserved
  15.  
  16. package Account;
  17.  
  18. import com.ms.mtx.*;
  19. import com.ms.com.*;
  20.  
  21. import accountlib.*;
  22.  
  23.  
  24. public class MoveMoney implements IMoveMoney {
  25.     
  26.     private static final String CLSID = "b790937a-e902-11d0-b5be-00c04fb957d8";
  27.  
  28.     // Perform() performs error handling for TruePerform().  If TruePerform() throws an 
  29.     // exception, then Perform() will call SetAbort() and pass the exception up 
  30.     // to the caller.  Otherwise, Perform() will simply call SetComplete() and return.
  31.  
  32.     public String Perform (int lngPrimeAccount, int lngSecondAccount, int lngAmount, int tranType) throws ComFailException {
  33.  
  34.         String result;
  35.         boolean bSuccess = false;
  36.  
  37.         // First of all, get the object context
  38.         IObjectContext ctxObject = MTx.GetObjectContext();
  39.  
  40.         try {
  41.             // Check for security
  42.             if ((lngAmount > 500 || lngAmount < -500) && !ctxObject.IsCallerInRole ("Managers"))
  43.                 throw new ComFailException ("Need 'Managers' role for amounts over $500");
  44.             
  45.             // Call the true function
  46.             result = truePerform (lngPrimeAccount, lngSecondAccount, lngAmount, tranType);
  47.             
  48.             bSuccess = true;
  49.             return result;
  50.         }
  51.  
  52.         // Upon exit, always call SetComplete if happy, or SetAbort if unhappy.
  53.         // We do this because we never save state across method calls.
  54.         finally {
  55.             if (bSuccess)
  56.                 ctxObject.SetComplete();
  57.             else
  58.                 ctxObject.SetAbort();
  59.         }
  60.     }
  61.     
  62.     
  63.     // TruePerform() is the function that performs the actual work for the Account class.
  64.     // If an error occurs during execution, it will throw a ComFailException for Perform()
  65.     // to handle.
  66.     
  67.     private String truePerform (int lngPrimeAccount, int lngSecondAccount, int lngAmount, int tranType)
  68.         throws ComFailException {
  69.  
  70.         String result;
  71.         IAccount objAccount = null;
  72.         IGetReceipt objReceipt = null;
  73.         
  74.         try {
  75.             // Create the account object
  76.             objAccount = (IAccount) MTx.GetObjectContext().CreateInstance 
  77.                     (CAccount.clsid, IAccount.iid);
  78.  
  79.             switch (tranType)
  80.             {
  81.             case 1:        // debit
  82.                 result = objAccount.Post (lngPrimeAccount, (- lngAmount));
  83.                 break;
  84.  
  85.             case 2:        // credit
  86.                 result = objAccount.Post (lngPrimeAccount, lngAmount);
  87.                 break;
  88.  
  89.             case 3:        // transfer
  90.                 result = objAccount.Post (lngPrimeAccount, (- lngAmount));
  91.                 result += "    ";
  92.                 result += objAccount.Post (lngSecondAccount, lngAmount);
  93.                 break;
  94.  
  95.             default:
  96.                 throw new ComFailException ("Invalid transaction type");
  97.             }
  98.  
  99.             // Get the receipt for the transaction
  100.             objReceipt = (IGetReceipt) MTx.GetObjectContext().CreateInstance 
  101.                     (CGetReceipt.clsid, IGetReceipt.iid);
  102.             int iReceiptNo = objReceipt.GetNextReceipt ();
  103.             result += "; Receipt No:  " + iReceiptNo;
  104.  
  105.             return result;
  106.         }
  107.  
  108.         finally {
  109.             // The following code is not strictly necessary. By calling ComLib.release here,
  110.             // the object counts seen in the MTX explorer remain correct. Without these release
  111.             // calls, the objects used here would not get released until after the next time
  112.             // the Java garbage collector runs. No other ill effect would be caused by omitting
  113.             // this code.
  114.  
  115.             // Note that this code will be executed regardless of whether we leave this
  116.             // method via return or via an exception.
  117.             if (objAccount != null) ComLib.release (objAccount);
  118.             if (objReceipt != null) ComLib.release (objReceipt);
  119.         }
  120.     }
  121. }
  122.