Microsoft Content Management Server Integration with SAP
|
|
- Marcus Kennedy
- 5 years ago
- Views:
Transcription
1 Microsoft Content Management Server Integration with SAP Using MCMS Custom Placeholders and the SAP.NET Connector Written by: Bill Olson, Avanade Tom Kirkby, Avanade Published on July 1 st, 2004 Abstract Microsoft Content Management Server (MCMS) 2002 allows authors to quickly create and update content on a Web site, with minimal knowledge of the site architecture or structure, using tasks predefined by a site administrator. Learn how to extend an existing MCMS implementation to deliver SAP content by making use of the SAP.NET Connector and MCMS custom placeholder controls. (34 printed pages)
2 Microsoft Corporation 2004.
3 CONTENTS INTRODUCTION...4 Overview 4 Business Scenario 4 Prerequisites 4 INTEGRATION APPROACH...6 SAP.NET Connector 7 Extending MCMS 8 CREATING CUSTOM PLACEHOLDERS IN MCMS`...9 INTEGRATING WITH SAP...12 Step 1: Install the Z_MSSP_GET_PAYROLL_RESULTS RFC into SAP 12 Step 2: Creating the SAP Class Library Project 13 Step 3: Generating the SAP.NET Connector Proxy Class 14 Step 4: Building the User Interface for the Custom Placeholder 17 Step 5: Implementing the Overridden Methods in the Custom Placeholder 25 Step 6: Creating the MCMS Template and Posting to Host the Placeholder 32 DEPLOYMENT CONSIDERATIONS...34 CONCLUSION...35 Related Links 35
4 INTRODUCTION Overview Microsoft Content Management Server (MCMS) 2002 is an enterprise Web content management system that enables companies to quickly and efficiently build, deploy, and maintain highly dynamic Internet, intranet, and extranet Web sites. MCMS internally stores web pages as instances of custom developed templates. These templates are composed of a series of content placeholders in which authors add or configure content to generate a customized web page. In addition to the standard content placeholders included with MCMS, custom placeholders can be developed which provide authors a custom interface for content generation. When a web page is requested, the page is assembled by combining the appropriate template, placeholders and content. This enables specific content to be reused and served to different devices, audiences, and individuals without complex coding or duplication of effort. In this white paper, we ll integrate MCMS web pages with SAP by building a custom placeholder and implementing a Web service proxy client using the SAP.NET Connector. The SAP.NET Connector is an SAP product that provides developers both design time tools and run time libraries for communicating between SAP systems and the Microsoft.NET platform. With the custom placeholder, content authors can easily build web pages that access and display SAP data to customers, business partners, and employees. Business Scenario You are the HR manager for the Woodgrove company. Woodgrove has just finished a SAP implementation and senior management wants to take advantage of the new system by integrating it with the existing intranet portal. You want to enable your employees to view their pay stub information and to enable the site editors to easily configure the information displayed using your Microsoft Content Management Server (MCMS) Web site. Prerequisites Microsoft Content Management Server (MCMS) 2002 requires the following minimum system configuration: Content Server: Microsoft Windows 2000 Server, Professional, or Advanced Server and Service Pack 2 or later (Microsoft Windows XP Professional Service Pack 1 can be used as an alternative to Windows 2000 Server for developing the site, though it should not be used in production) Microsoft SQL Server 2000 and SP2 Microsoft.NET Framework and SP2 MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 4
5 Microsoft Internet Information Services (IIS) 5.0 and IIS security hotfix MS Microsoft Internet Explorer 6.0 or later Internet Explorer WebControls v.1.0 Database: SQL Server 2000 Developer tools: All server software (Microsoft Windows XP Professional Service Pack 1 can be used as an alternative to Windows 2000 Server) Microsoft Visual Studio.NET Java Runtime Environment (You can download JRE version 1.3 or later from SAP.NET Connector Information about the SAP.Net Connector available from (SAP customers and partner can download the SAP.Net Connector from the SAP Marketplace SAP licensing conditions apply to all users, who connect to an SAP system using the SAP.NET Connector MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 5
6 INTEGRATION APPROACH In our business scenario, the HR manager needs to extend existing MCMS pages to include SAP pay stub data specific to each employee. In MCMS, web pages are stored as instances of templates, called postings, and specific page content is stored as objects within the MCMS database. Templates are composed of a series of content placeholders which authors use to customize a page. In addition to the standard content placeholders included with MCMS, custom placeholders can be developed to perform customized tasks. When a web page is requested, the page is assembled by combining the appropriate template, placeholders and content. This enables specific content to be reused and served to different devices, audiences, and individuals without complex coding or duplication of effort. In our solution, we ll develop a custom placeholder component that integrates to SAP using the SAP.NET Connector to display pay stub data to the end user. The following diagram represents our solution architecture: Visual Studio.NET 2003 Site Author Web Browser 4 Site User Web Browser Solution Overview 1 Using the SAP.Net Connector, a custom placeholder control is developed providing access to the SAP data dictionary. IIS / MCMS Server SAP.NET Generated Proxy Class SAP RFC / SOAP 3 1 ASPX Template Custom MCMS Placeholder Control HTTP / HTTPS 2 MCMS Managed API MCMS Content Repository SQL Server The MCMS Managed API allows data to be stored and retrieved for customizing the user interface during runtime. Using the generated SAP.NET Connector proxy class, a web service is accessed and employee pay stub data returned. Using the custom MCMS placeholder, site authors are able to customize the presentation and employees can view their pay stub information. Employee Pay Stub Data SAP Server Solution Design MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 6
7 SAP.NET Connector SAP.NET Connector is a dedicated SAP product offering SAP NetWeaver Microsoft.NET interoperability. The SAP.NET Connector provides both design time tools and run time libraries for communication between SAP systems and the Microsoft.NET platforms. The design time tools integrate with Microsoft Visual Studio.NET to provide developers the ability to generate.net proxy classes based upon SAP system data dictionary objects. The run time libraries provide common functions used at run time by the proxy classes generated at design time to enable access to the SAP system. The SAP.NET Connector supports both SAP Remote Function Calls (RFC) and Web services 1 access to the SAP system. Using the SAP.NET Connector, developers can use any.net language such as C#, Visual Basic.NET, Managed C++, or J# to create Web form, Windows form, console applications, or any other.net project type. Design Time Microsoft.NET Visual Studio.NET 2003 VB C# C++ J# Proxy Class Generator mysap Technology BOR/DDIC Interface repository Run - Time Common Language Runtime Web Application Services.NET Connector Component (generated) SAP.NET Connector.NET Connector Runtime RFC Layer SOAP Layer SAP.NET Connector Architecture The SAP.NET Connector allows the developer to connect to SAP systems either directly, using a WSDL file contained in the SAP IFR, or through a standard WSDL file. For further information on the SAP.NET Connector visit 1 Web Services are only available in version 6.20 or higher of the SAP Web Application Server (WAS) MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 7
8 Extending MCMS Microsoft has made it very easy to extend the functionality of MCMS. The following four methods are the standard ways of extending MCMS functionality: Creating custom placeholder controls to provide a specialized user interface for authors contributing content to the Web site. Extending the Web Author application by customizing the appearance of the Web Author console or by adding or removing functionality in the Web Author console. Implementing extensions to the workflow process that is built into MCMS, such as notifying users by that their approval is required on a posting before it will be published to the Web site. Implementing MCMS to provide or consume Web services to extend the range of content sources for the Web site, or to provide the content on the Web site to other applications. In our scenario, the author will need to customize the appearance of the external SAP content. They may also need to show the same type of information in different formats in other areas of the site. A custom placeholder control will meet these requirements the best. Placeholders are editable regions in a template that authors can modify to add content to each page based on that template. Placeholders are implemented using placeholder controls in template files and placeholder definitions in templates. You can access the content stored in a placeholder programmatically through the Microsoft Content Management Server (MCMS) Publishing API by accessing the Placeholder class. A placeholder control is an ASP.NET-based server control that provides authors with a user interface for editing sections of a template and also renders presentation content for site users. You create custom placeholder controls to create specialized user interfaces for authors who use the Web Author. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 8
9 CREATING CUSTOM PLACEHOLDERS IN MCMS` Creating custom placeholders in MCMS is very simple 3-step process: 1. Create a Custom Placeholder Control Project 2. Create a Custom Placeholder Control Class 3. Implement the Required Overridden Methods Step 1: Creating the Custom Placeholder Control Project To create a new placeholder control project in Visual Studio.NET: 1. In Visual Studio.NET, on the File menu, click New, and then click Project. 2. In the New Project window, in the Project Types section, select Visual C# Projects. 3. While the New Project window is still open, in the Templates section, select Web Control Library. 4. While the New Project window is still open, highlight the text next to Name, type McmsSapControls, and then click OK. You have now created a project named McmsSapControls. The next step is to add the required MCMS references to the project. *Note: You can also add a custom placeholder control to a pre-existing web control library project. To add MCMS references to the project 1. On the Project menu, click Add Reference. 2. In the Add Reference window, click Browse. 3. In the Select Component window, browse to <InstallDrive>:\Program Files\Microsoft Content Management Server\Server\bin, and select the following components to add as references: Microsoft.ContentManagement.Common.dll Microsoft.ContentManagement.Publishing.dll Microsoft.ContentManagement.Publishing.Extensions.Placeholders.dll Microsoft.ContentManagement.Web.dll Microsoft.ContentManagement.WebControls.dll 4. Click Open, and then click OK. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 9
10 The MCMS components now appear in the Visual Studio Solution Explorer under References. Step 2: Creating the Custom Placeholder Control Class To create custom placeholder controls, you create a new class that is derived from the base placeholder control class BasePlaceholderControl. To create the custom placeholder control class 1. In the Visual Studio Solution Explorer window, click McmsSapControls, and then on the File menu, click Add New Item. 2. In the Add New Item window, in the Categories section, select Local Project Items. 3. In the Templates section, select Class. 4. Select the text next to Name and type McmsSapControl.cs, and then click Open. 5. The class file opens, which includes a class signature and a constructor. To inherit from the BasePlaceholderControl class 1. Add the following using directives to the top of the namespace so that you can use short names to refer to classes in these namespaces: using System.Xml; using System.Xml.Xsl; using System.Web.UI.WebControls; using Microsoft.ContentManagement.Publishing; using Microsoft.ContentManagement.Publishing.Extensions.Placeholders; using Microsoft.ContentManagement.WebControls.Design; using Microsoft.ContentManagement.WebControls; 2. Add the following inheritance syntax to the McmsSapControl class so that the class inherits from the BasePlaceholder: public class McmsSapControl : BasePlaceholderControl The custom placeholder control now inherits from the BasePlaceholderControl class. It will not compile until the five required methods implemented as virtual methods in the BasePlaceholderControl class are implemented in the custom placeholder control. 3. Add method signatures for the required overridden methods of the BasePlaceholderControl class. The following code implements method signatures for the required methods: MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 10
11 protected override void CreateAuthoringChildControls(BaseModeContainer authoringcontainer) protected override void CreatePresentationChildControls(BaseModeContainer presentationcontainer) protected override void LoadPlaceholderContentForAuthoring(PlaceholderControlEventArgs e) protected override void LoadPlaceholderContentForPresentation(PlaceholderControlEventArgs e) protected override void SavePlaceholderContent(PlaceholderControlSaveEventArgs e) protected override void OnPopulatingDefaultContent(PlaceholderControlCancelEventArgs e) The custom placeholder control class you created is empty, but will now build without compile errors because the required method signatures are present. We will provide our implementation for these methods when we build out our solution in the Integrating with SAP section. For now, we ll just discuss each of the methods briefly: CreateAuthoringChildControls - This method allows you to add your authoring controls to the AuthoringModeContainer collection parameter. Controls in this collection are displayed during authoring time. CreatePresentationChildControls This method allows you to add your presentation controls to the PublishingModeContainer collection parameter. Controls in this collection are displayed at presentation time. LoadPlaceholderContentForAuthoring This method allows you to load content from MCMS into the authoring controls. LoadPlaceholderContentForPresentation This method allows you to load content from MCMS into the presentation controls. SavePlaceholderContent This method allows you to save content modified with the authoring controls to the Placeholder object. OnPopulatingDefaultContent This method allows you to display default content in the authoring control when creating the posting is first created. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 11
12 INTEGRATING WITH SAP Now that we ve created our custom placeholder, the following steps remain to integrate SAP and retrieve the pay stub information: 1. Install the Z_MSSP_GET_PAYROLL_RESULTS RFC into SAP 2. Create a Class Library Project for the SAP Connector Proxy Class 3. Connect to SAP and Generate the Connector Proxy Class 4. Build the User Interface for the Custom Placeholder 5. Implement the overridden methods in the custom placeholder 6. Create a MCMS template and posting to host our control In order to retrieve the pay stub information we need from SAP, there are two SAP functions that we need to call: BAPI_GET_PAYROLL_RESULT_LIST This function provides a list of payroll items given an employee identifier and a date range. Z_MSSP_GET_PAYROLL_RESULTS* This function provides a detail view of a payroll item retrieved in the previous function call. In addition to our pay stub information, we need some way of programmatically associating our employees Windows accounts with the corresponding employee identifiers in SAP. We need this association because it is likely our employees do not know their SAP employee identifier, nor should they be expected to provide it every time they access their payroll information. Since this information is stored in SAP, this can be easily done using the following remote function: BAPI_USR01DOHR_GETEMPLOYEE* This function provides an employee s SAP identifier given a username. *Note: This is only one method for obtaining the employee identifier. Additional methods are discussed in the Deployment Considerations section of this document. For more information about remote functions available from SAP, consult your SAP documentation or visit the SAP Interface Repository at Step 1: Install the Z_MSSP_GET_PAYROLL_RESULTS RFC into SAP Install SAP Remote Function Call To setup the Transport Management System of IDES: 1. Log on as user DDIC in client 000. Enter transaction code STMS. If no dialog box appears prompting for transport domain and description, then the MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 12
13 Transport Management System is already set up and you can omit the rest of this procedure. If a dialog box appears, continue to step In Transport domain, type the system ID of SAP IDES system. In Description, type Main transport domain. 3. Select Overview, and then click Systems. Select SAP System, point to Create, and then click Virtual system. 4. In System, type DUM. In Description, type Dummy system. 5. Select Extras, and then click Distribute and activate configuration. 6. Select Environment, and then click Transport Routes. 7. Select Configuration, point to Display, and then click Change. 8. Select Configuration, point to Standard configuration, and then click Development and production system. 9. In Source system, type the system ID of the SAP IDES system. 10. In Production system, type DUM. 11. Select Configuration, and then click Distribute and activate. To install the PayStub extract function to an IDES system on the SAP Server 1. Copy Z_Mssp_Get_Payroll_Results.SPS to /usr/sap/trans/data, and then copy Z_Mssp_Get_Payroll_Results.SPS to /usr/sap/trans/cofiles. 2. Log on to the IDES client. Enter transaction code STMS. 3. Select Overview, and then click Imports. 4. To display the import queue, double-click the system ID of the SAP IDES system. To add the new transport to the import queue 1. Select Extras, point to Other Requests, and then click Add. 2. Select Enter, and then click Yes in the dialog box. The import queue is displayed again with the additional request as the last entry. 3. Rest the pointer on the new request that you want to import, select Request, and then click Import. 4. Enter the current client (800 for IDES) and confirm the client in the confirmation dialog box. The system will import the entered transport request and display the Import Queue again when finished. Step 2: Creating the SAP Class Library Project To create the SAP class library project 1. In Visual Studio.NET, on the File menu click New, and then click Project. 2. In the New Project window, in the Project Types section, select Visual C# Projects. 3. While the New Project window is still open, in the Templates section, select Class Library. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 13
14 4. While the New Project is still open, highlight the text next to Name, type McmsSapIntegration, and then click OK. You have now created a project named McmsSapIntegration. The next step is to generate the SAP.NET Connector proxy class. Step 3: Generating the SAP.NET Connector Proxy Class To generate the SAP.NET Connector Proxy class 1. In the Visual Studio Solution Explorer window, click McmsSapIntegration, and then on the File menu, click Add New Item. 2. In the Add New Item window, in the Categories section, select Local Project Items. 3. In the Templates section, select SAP Connector Class. 4. Select the text next to Name and type SapPaystubProxy.cs, and then click Open. The following dialog opens: Choose SAP Server (the default), and then click Next. The following dialog opens: MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 14
15 Fill in the required logon information*, leave all other options at their default settings, and click Next. *Note: You may need to get this information from your SAP system administrator. The following dialog opens: In the Name-Filter text box, enter the following function names, one at a time, and click the Search button. For each found method in the list box on the left, click the Add button. The function names we need to add are: MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 15
16 BAPI_GET_PAYROLL_RESULT_LIST, Z_MSSP_GET_PAYROLL_RESULTS* and BAPI_USR01DOHR_GETEMPLOYEE. *Note: This remote function will only be available in the wizard if it is transported into SAP. You may need to talk to your SAP system administrator to get access to this function. When you are finished adding your functions, click the Next button. Note: Notice how a brief description of the function appears under the left hand side list box. This information can be useful when determining which function to use for a given operation. Your proxy class will be generated, and added to your project. You should see something like the following in your Visual Studio Solution Explorer window: MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 16
17 If you select the proxy file (it s the file with the extension.sapwsdl), and reveal hidden files using the Show All Files option in the Solution Explorer window, you will see the generated files: Step 4: Building the User Interface for the Custom Placeholder Defining our XML Schema Now that we ve generated the SAP.NET Connector Proxy class we need to build the user interface for the custom placeholder. The first step is to determine the functional needs of the site author and define an XML schema to store this information in the MCMS repository. Our site author needs the ability to determine which pay stub fields will be displayed within the detail view. Given this information, the following simple XML format will suffice: <PayStubFields> <PayStubField name="description" visible="1" /> <PayStubField name="currenthours" visible="1" /> <PayStubField name="currentamount" visible="1" /> <PayStubField name="currenttotal" visible="1" /> <PayStubField name="yearlyhours" visible="1" /> <PayStubField name="yearlyamount" visible="1" /> <PayStubField name="yearlytotal" visible="1" /> </PayStubFields> In this schema, the name of the SAP data field is represented by the name attribute, and the visibility determination is set using the visible attribute. Our user interface will allow the author to determine the column visibility and save this information to the MCMS repository. When an employee visits the site, this information will be used to render their individual pay stub information using only these visible columns. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 17
18 Authoring Mode User Interface Design For the purposes of this article, we will make the authoring user interface as simple as possible. Because we are using XML for our MCMS content, we will simply use the XML editing control provided by MCMS for authoring. In an enterprise environment, you would probably want to replace this control with a more user-friendly control. The following figure illustrates this control: Authoring View MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 18
19 Presentation Mode User Interface Design The presentation mode for the placeholder is composed of two tables. The first table is a summary table of all pay stubs for the employee. The employee will be able to click a link in the table and display the second table, which is represents a detailed view for an individual pay stub. The following figure illustrates how these two HTML tables will appear in our template: Summary and Detail Presentation Views To build these tables, we will use the ASP.NET DataGrid Web control. The DataGrid Web server control is a multi-column, data-bound grid. Extensive customization is available at design-time using the Property Builder dialog box. At design-time you can build columns that display and edit data, columns that contain Edit, Update, Cancel, and Select buttons, columns that contain custom buttons, and template columns. Note: For more information regarding the ASP.NET DataGrid Web control, consult your Visual Studio.NET documentation. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 19
20 To make it easier to bind the SAP pay stub data to the grid controls, we will create a wrapper class that returns DataSet objects and add it to our integration library. To create the simplified wrapper class 1. In the Visual Studio Solution Explorer window, click McmsSapIntegration, and then on the File menu, click Add New Item. 2. In the Add New Item window, in the Categories section, select Local Project Items. 3. In the Templates section, select Class. 4. Select the text next to Name and type PaystubData.cs, and then click Open. 5. Next, add the following code to your class: using System; using System.Data; using SAP.Connector; namespace McmsSapIntegration public class PaystubData #region Private Fields SAPConnection sapconnection = null; BAPIRETURN1 returnmessages = null; BAPI7004_RLTable summarydata = null; ZMSSP_EEADDRESSTable addressdata = null; ZMSSP_EEBANKDATATable bankdata = null; ZMSSP_EEEARNINGSTable earningsdata = null; ZMSSP_EEINFOTable infodata = null; ZMSSP_EELEAVEDATATable leavedata = null; ZMSSP_EEDEDUCTIONSTable posttaxdeductiondata = null; ZMSSP_EEDEDUCTIONSTable pretaxdeductiondata = null; ZMSSP_EEPAYHEADERTable headerdata = null; ZMSSP_EETAXESTable taxdata = null; ZMSSP_EEW4INFOTable w4data = null; ZMSSP_EEALLSUBTOTALSTable subtotaldata = null; #endregion #region Constants private const string ERROR = "E"; private const string PAY_DATE = "Paydate"; private const string SEQUENCE_NUMBER = "Sequencenumber"; private const string DESCRIPTION = "Description"; private const string CURRENT_HOURS = "CurrentHours"; private const string CURRENT_AMOUNT = "CurrentAmount"; private const string CURRENT_TOTAL = "CurrentTotal"; private const string YEARLY_HOURS = "YearlyHours"; private const string YEARLY_AMOUNT = "YearlyAmount"; private const string YEARLY_TOTAL = "YearlyTotal"; private const string HOURS = "Timehours"; private const string AMOUNT = "Amount"; private const string YTD_AMOUNT = "Ytd_Amount"; private const string SUB_TOTAL_AMOUNT = "Subtot_Amt"; MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 20
21 private const string SUB_YTD_AMOUNT = "Sub_Ytd_Amt"; private const string BANK_ACCT_NO = "Bank_Account_No"; private const string TRANSFER_AMOUNT = "Transfer_Amount"; private const string SPACE = " "; #endregion #region Constructor public PaystubData() Destination destination = new Destination(); // Note: you should load these values from your // application s configuration file. destination.client = [insert client number]; destination.username = [insert username]; destination.password = [insert password]; destination.language = [insert language]; destination.appserverhost = [insert server host]; destination.systemnumber = [insert system number]; sapconnection = new SAPConnection(destination); #endregion #region Public Methods public DataTable GetPaystubSummaryData(string employeeid) this.returnmessages = new BAPIRETURN1(); this.summarydata = new BAPI7004_RLTable(); DataTable summarytable = null; DataTable dt = new DataTable(); DataRow dr = null; SapPaystubProxy sappaystub = new SapPaystubProxy(); sappaystub.connection = sapconnection; sappaystub.bapi_get_payroll_result_list( employeeid, null, null, out returnmessages, ref summarydata); summarytable = summarydata.toadodatatable(); dt.columns.add(pay_date); dt.columns.add(sequence_number); for(int i = 0; i < summarytable.rows.count; i++) dr = dt.newrow(); dr[pay_date] = summarytable.rows[i][pay_date]; dr[sequence_number] = summarytable.rows[i][sequence_number]; dt.rows.add(dr); return dt; public DataTable GetPaystubDetailData( MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 21
22 string employeeid, string sequencenumber) this.addressdata = new ZMSSP_EEADDRESSTable(); this.bankdata = new ZMSSP_EEBANKDATATable(); this.earningsdata = new ZMSSP_EEEARNINGSTable(); this.infodata = new ZMSSP_EEINFOTable(); this.leavedata = new ZMSSP_EELEAVEDATATable(); this.posttaxdeductiondata = new ZMSSP_EEDEDUCTIONSTable(); this.headerdata = new ZMSSP_EEPAYHEADERTable(); this.pretaxdeductiondata = new ZMSSP_EEDEDUCTIONSTable(); this.taxdata = new ZMSSP_EETAXESTable(); this.subtotaldata = new ZMSSP_EEALLSUBTOTALSTable(); this.w4data = new ZMSSP_EEW4INFOTable(); SapPaystubProxy sappaystub = new SapPaystubProxy(); sappaystub.connection = sapconnection; sappaystub.z_mssp_get_payroll_results( employeeid, sequencenumber, out returnmessages, ref this.addressdata, ref this.bankdata, ref this.earningsdata, ref this.infodata, ref this.leavedata, ref this.posttaxdeductiondata, ref this.headerdata, ref this.pretaxdeductiondata, ref this.subtotaldata, ref this.taxdata, ref this.w4data); DataTable earningstable = this.earningsdata.toadodatatable(); DataTable posttaxdeductionstable = this.posttaxdeductiondata.toadodatatable(); DataTable pretaxdeductionstable = this.pretaxdeductiondata.toadodatatable(); DataTable subtotaltable = this.subtotaldata.toadodatatable(); DataTable taxtable = this.taxdata.toadodatatable(); DataTable banktable = this.bankdata.toadodatatable(); DataTable dt = new DataTable(); DataRow dr = null; dt.columns.add(description); dt.columns.add(current_hours); dt.columns.add(current_amount); dt.columns.add(current_total); dt.columns.add(yearly_hours); dt.columns.add(yearly_amount); dt.columns.add(yearly_total); // Gross Salary Rows for (int i = 0; i < earningstable.rows.count; i++) dr = dt.newrow(); dr[description] = earningstable.rows[i][description]; dr[current_hours] = earningstable.rows[i][hours]; dr[current_amount] = earningstable.rows[i][amount]; MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 22
23 dr[yearly_amount] = earningstable.rows[i][ytd_amount]; dt.rows.add(dr); if(subtotaltable.rows.count > 0) dr = dt.newrow(); dr[description] = subtotaltable.rows[0][description]; dr[current_amount] = subtotaltable.rows[0][sub_total_amount]; dr[current_total] = subtotaltable.rows[0][sub_total_amount]; dr[yearly_amount] = subtotaltable.rows[0][sub_ytd_amount]; dr[yearly_total] = subtotaltable.rows[0][sub_ytd_amount]; dt.rows.add(dr); AddSpace(dt); // Tax Withheld Rows for (int i = 0; i < taxtable.rows.count; i++) dr = dt.newrow(); dr[description] = taxtable.rows[i][description]; dr[current_amount] = taxtable.rows[i][amount]; dr[yearly_amount] = taxtable.rows[i][ytd_amount]; dt.rows.add(dr); if(subtotaltable.rows.count > 0) dr = dt.newrow(); dr[description] = subtotaltable.rows[1][description]; dr[current_amount] = subtotaltable.rows[0][sub_total_amount]; dr[current_total] = subtotaltable.rows[1][sub_total_amount]; dr[yearly_amount] = subtotaltable.rows[0][sub_ytd_amount]; dr[yearly_total] = subtotaltable.rows[1][sub_ytd_amount]; dt.rows.add(dr); AddSpace(dt); // Net Salary Rows if(subtotaltable.rows.count > 4) dr = dt.newrow(); dr[description] = subtotaltable.rows[5][description]; dr[current_total] = subtotaltable.rows[5][sub_total_amount]; dr[yearly_total] = subtotaltable.rows[5][sub_ytd_amount]; dt.rows.add(dr); MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 23
24 AddSpace(dt); // Bank Rows if(banktable.rows.count > 0) dr = dt.newrow(); dr[description] = "Checking Account: " + banktable.rows[0][bank_acct_no]; dr[current_amount] = banktable.rows[0][transfer_amount]; dt.rows.add(dr); dr = dt.newrow(); dr[description] = "DIRECT DEPOSIT AMOUNT"; dr[current_amount] = banktable.rows[0][transfer_amount]; dr[current_total] = banktable.rows[0][transfer_amount]; dt.rows.add(dr); AddSpace(dt); // Check Total Rows if(banktable.rows.count > 0 && subtotaltable.rows.count > 0) dr = dt.newrow(); dr[description] = "CHECK AMOUNT"; decimal transferamount = Convert.ToDecimal( banktable.rows[0][transfer_amount]); decimal netpay = Convert.ToDecimal( subtotaltable.rows[5][sub_total_amount]); decimal checkamount = netpay - transferamount; dr[current_total] = String.Format(checkAmount.ToString(), "c"); dt.rows.add(dr); AddSpace(dt); return dt; public string GetEmployeeIdFromUsername(string username) string employeeid = String.Empty; BAPIRET2 ret = new BAPIRET2(); SapPaystubProxy sappaystub = new SapPaystubProxy(); sappaystub.connection = sapconnection; sappaystub.bapi_usr01dohr_getemployee( null, null, username, out employeeid, out ret); if(ret.type!= ERROR) MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 24
25 else #endregion return employeeid; return String.Empty; #region Private Methods private static void AddSpace(DataTable table) DataRow dr = table.newrow(); dr[description] = SPACE; #endregion table.rows.add(dr); This class implements two public methods for retrieving pay stub data and one for returning the employee identifier for a given user: GetPaystubSummaryData This method takes an employee identifier parameter and returns a DataTable representing the summary of pay stub information for the employee. GetPaystubDetailData This method takes an employee identifier and a pay stub sequence number and returns a DataTable representing the detail for a single paystub. GetEmployeeIdFromUserName This method takes a user name and returns a SAP employee identifier. Step 5: Implementing the Overridden Methods in the Custom Placeholder The next step is to add code to our placeholder class that implements the overridden methods from the BasePlaceHolder class. First, you will need to set a reference to the McmsSapIntegration project from your placeholder project. To set the reference to the McmsSapIntegration project 1. In the Visual Studio Solution Explorer window, right click on the References node in your placeholder control project. 2. Click Add Reference. 3. In the Add Reference dialog, click the Projects tab, click on the McmsSapIntegration project in the list of projects, click Select and click OK. Next, modify your placeholder class file so it contains the following code: using System; MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 25
26 using System.Data; using System.Xml; using System.Xml.Xsl; using System.Web.UI.WebControls; using Microsoft.ContentManagement.Publishing; using Microsoft.ContentManagement.Publishing.Extensions.Placeholders; using Microsoft.ContentManagement.WebControls.Design; using Microsoft.ContentManagement.WebControls; using McmsSapIntegration; namespace McmsWebControlLibrary.PlaceholderControls public class McmsSapControl : BasePlaceholderControl #region Private Members private TextBox xmleditcontrol; private Xml xmlpresentationcontrol; private System.Web.UI.WebControls.DataGrid summarydatagrid; private System.Web.UI.WebControls.DataGrid detaildatagrid; private string username = String.Empty; private string employeeid = String.Empty; #endregion public McmsSapControl() PaystubData paystubdata = new PaystubData(); this.username = this.page.user.identity.name; this.employeeid = paystubdata.getemployeeidfromusername(username); protected override void CreateAuthoringChildControls(BaseModeContainer authoringcontainer) this.xmleditcontrol = new TextBox(); this.xmleditcontrol.id = "XmlAuthoringControl"; this.xmleditcontrol.textmode = System.Web.UI.WebControls.TextBoxMode.MultiLine; this.xmleditcontrol.height = 300; this.xmleditcontrol.width = 450; authoringcontainer.controls.add(this.xmleditcontrol); protected override void CreatePresentationChildControls( BaseModeContainer presentationcontainer) this.xmlpresentationcontrol = new Xml(); this.xmlpresentationcontrol.id = "XmlPresentationControl"; presentationcontainer.controls.add( this.xmlpresentationcontrol); // Setup the Summary Grid this.summarydatagrid = new DataGrid(); this.summarydatagrid.id = "summarydatagrid"; this.summarydatagrid.allowpaging = true; this.summarydatagrid.cellpadding = 3; this.summarydatagrid.autogeneratecolumns = false; this.summarydatagrid.width = new Unit("50%"); this.summarydatagrid.borderwidth = new Unit("1px"); this.summarydatagrid.pagerstyle.nextpagetext = "Next >"; this.summarydatagrid.pagerstyle.prevpagetext = "< Previous"; MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 26
27 this.summarydatagrid.pagerstyle.horizontalalign = HorizontalAlign.Left; this.summarydatagrid.pagerstyle.mode = PagerMode.NextPrev; this.summarydatagrid.pageindexchanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler( this.summarydatagrid_pageindexchanged); presentationcontainer.controls.add(this.summarydatagrid); // Setup the Detail Grid this.detaildatagrid = new DataGrid(); this.detaildatagrid.id = "detaildatagrid"; this.detaildatagrid.allowpaging = false; this.detaildatagrid.cellpadding = 3; this.detaildatagrid.autogeneratecolumns = false; this.detaildatagrid.width = new Unit("70%"); this.detaildatagrid.borderwidth = new Unit("1px"); presentationcontainer.controls.add(this.detaildatagrid); protected override void LoadPlaceholderContentForAuthoring(PlaceholderControlEventArgs e) EnsureChildControls(); try this.xmleditcontrol.text = ((XmlPlaceholder)this.BoundPlaceholder).XmlAsString; catch (Exception exp) // show the error as placeholder content this.xmlpresentationcontrol.documentcontent = "<error>" + exp.message + "</error>"; protected override void LoadPlaceholderContentForPresentation( PlaceholderControlEventArgs e) EnsureChildControls(); BoundColumn boundcolumn = null; HyperLinkColumn hyperlinkcolumn = null; PaystubData paystubdata = new PaystubData(); // Sequence Number boundcolumn = new BoundColumn(); boundcolumn.datafield = "Sequencenumber"; boundcolumn.headertext = "Sequence #"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; boundcolumn.headerstyle.width = new Unit("35%"); boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Center; this.summarydatagrid.columns.add(boundcolumn); // Paydate boundcolumn = new BoundColumn(); boundcolumn.datafield = "Paydate"; boundcolumn.headertext = "Pay Date"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 27
28 boundcolumn.headerstyle.width = new Unit("40%"); boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Center; this.summarydatagrid.columns.add(boundcolumn); // Details link hyperlinkcolumn = new HyperLinkColumn(); hyperlinkcolumn.text = "Details..."; hyperlinkcolumn.headerstyle.width = new Unit("25%"); hyperlinkcolumn.itemstyle.horizontalalign = HorizontalAlign.Center; string navigateurl = AppendQueryString( CmsHttpContext.Current.Posting.Url, "sequence", "0"); hyperlinkcolumn.datanavigateurlfield = "Sequencenumber"; hyperlinkcolumn.datanavigateurlformatstring = navigateurl; this.summarydatagrid.columns.add(hyperlinkcolumn); // Bind the summary data DataTable summarytable = paystubdata.getpaystubsummarydata(this.employeeid); this.summarydatagrid.datasource = summarytable; this.summarydatagrid.databind(); // Load the xml settings and determine which columns are // visible in the data grid string sequencenumber = this.page.request.querystring["sequence"]; if (sequencenumber!= null) string xmlcontent = ((XmlPlaceholder)this.BoundPlaceholder).XmlAsString; XmlDocument xmldocument = new XmlDocument(); xmldocument.loadxml(xmlcontent); XmlNode node = xmldocument.selectsinglenode( "descendant::paystubfield[@name='description']"); if (node.attributes["visible"].value == "1") // Description boundcolumn = new BoundColumn(); boundcolumn.datafield = "Description"; boundcolumn.headertext = "Description"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; this.detaildatagrid.columns.add(boundcolumn); node = xmldocument.selectsinglenode( "descendant::paystubfield[@name='currenthours']"); if (node.attributes["visible"].value == "1") // CurrentHours boundcolumn = new BoundColumn(); boundcolumn.datafield = "CurrentHours"; boundcolumn.headertext = "Hours"; MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 28
29 boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Right; this.detaildatagrid.columns.add(boundcolumn); node = xmldocument.selectsinglenode( "descendant::paystubfield[@name='currentamount']"); if (node.attributes["visible"].value == "1") // CurrentAmount boundcolumn = new BoundColumn(); boundcolumn.datafield = "CurrentAmount"; boundcolumn.headertext = "Amount"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Right; this.detaildatagrid.columns.add(boundcolumn); node = xmldocument.selectsinglenode( "descendant::paystubfield[@name='currenttotal']"); if (node.attributes["visible"].value == "1") // CurrentTotal boundcolumn = new BoundColumn(); boundcolumn.datafield = "CurrentTotal"; boundcolumn.headertext = "Total"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Right; this.detaildatagrid.columns.add(boundcolumn); node = xmldocument.selectsinglenode( "descendant::paystubfield[@name='yearlyhours']"); if (node.attributes["visible"].value == "1") // YearlyHours boundcolumn = new BoundColumn(); boundcolumn.datafield = "YearlyHours"; boundcolumn.headertext = "YTD Hours"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Right; this.detaildatagrid.columns.add(boundcolumn); node = xmldocument.selectsinglenode( "descendant::paystubfield[@name='yearlyamount']"); if (node.attributes["visible"].value == "1") // YearlyAmount boundcolumn = new BoundColumn(); boundcolumn.datafield = "YearlyAmount"; MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 29
30 boundcolumn.headertext = "YTD Amount"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Right; this.detaildatagrid.columns.add(boundcolumn); node = xmldocument.selectsinglenode( "descendant::paystubfield[@name='yearlytotal']"); if (node.attributes["visible"].value == "1") // YearlyTotal boundcolumn = new BoundColumn(); boundcolumn.datafield = "YearlyTotal"; boundcolumn.headertext = "YTD Total"; boundcolumn.headerstyle.horizontalalign = HorizontalAlign.Center; boundcolumn.itemstyle.horizontalalign = HorizontalAlign.Right; this.detaildatagrid.columns.add(boundcolumn); else DataTable detailtable = paystubdata.getpaystubdetaildata( this.employeeid, sequencenumber); detaildatagrid.datasource = detailtable; detaildatagrid.databind(); detaildatagrid.visible = true; detaildatagrid.visible = false; protected override void SavePlaceholderContent(PlaceholderControlSaveEventArgs e) EnsureChildControls(); try ((XmlPlaceholder)this.BoundPlaceholder).XmlAsString = this.xmleditcontrol.text; catch (Exception exp) // Possible validation exceptions // If you want, you can override it with your own // custom exception string newexceptionmessage = String.Format( "[0 \"1\"] Error: 2", this.gettype().name, this.id, exp.message ); Exception overriddenexception = new Exception(newExceptionMessage, exp); // Raise new exception so the BasePlaceholderControl MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 30
31 // can handle it throw overriddenexception; protected override void OnPopulatingDefaultContent(PlaceholderControlCancelEventArgs e) try string xmlcontent <PayStubFields> <PayStubField name="description" visible="1" /> <PayStubField name="currenthours" visible="1" /> <PayStubField name="currentamount" visible="1" /> <PayStubField name="currenttotal" visible="1" /> <PayStubField name="yearlyhours" visible="1" /> <PayStubField name="yearlyamount" visible="1" /> <PayStubField name="yearlytotal" visible="1" /> </PayStubFields> ; xmleditcontrol.text = xmlcontent; catch (Exception f) string message = f.message; private string AppendQueryString( string url, string parameter, string value) int startpos = url.indexof("&" + parameter + "="); string newparam = String.Empty; if (url.indexof("?")!= -1) newparam = "&" + parameter + "=" + value; else newparam = "?" + parameter + "=" + value; return url + newparam; if (startpos!= -1) string oldparam = ""; int endpos = url.indexof("&", startpos + 1); if (endpos!= -1) oldparam = url.substring( startpos, endpos - startpos); else oldparam = url.substring( startpos, url.length - startpos); else url = url.replace(oldparam, newparam); MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 31
32 url = url + newparam; return url; private void summarydatagrid_pageindexchanged( object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) PaystubData paystubdata = new PaystubData(); DataTable summarytable = paystubdata.getpaystubsummarydata(this.employeeid"); summarydatagrid.datasource = summarytable; summarydatagrid.currentpageindex = e.newpageindex; summarydatagrid.databind(); Step 6: Creating the MCMS Template and Posting to Host the Placeholder Next, we need to create a MCMS Template to host the new placeholder control. To create the MCMS Template 1. In the Visual Studio Solution Explorer window, click on your MCMS web project, and then on the File menu, click Add New Item. 2. In the Add New Item window, in the Categories section, select Content Management Server. 3. In the Templates section, select MCMS Template File. 4. Select the text next to Name and type SapIntegration.aspx, and then click Open. 5. Add the MCMS authoring console control by dragging and dropping it from the Visual Studio Solution Explorer window (Note: for our purposes, we are using the default console provided with the WoodGrove sample site in MCMS). 6. In the Toolbox window, right click on an open tab and select Add/Remove Items. 7. In the Customize Toolbox window, click the Browse button on the.net Framework Components tab and locate the McmsSapControl.dll file we created in the previous section, click Open and click OK to close the dialog. The MCMS custom placeholder control now appears on the toolbox. 8. In the MCMS Template Explorer window, right click on Templates and click New Template. Name your template SAP Integration. 9. Right click on the newly created template and click Properties. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 32
33 10. In the Properties window, click on the PlaceholderDefinitions property. The Placeholder Definition Collection Editor window loads. 11. Click the down arrow button next to the Add button and click XmlPlaceholderDefinition. Name your definition SapPaystubPlaceholderDefinition and Click OK. 12. Modify the TemplateFile property and select the file you created in the Select File dialog. 13. Drag and drop an instance of the McmsSapControl onto the newly created template file. 14. With the placeholder control selected on the template, update the PlaceholderToBind property in the Properties window to reference the newly created definition. 15. In the MCMS Template Explorer window, right click the template and click Save. Right click again and click Check In. 16. Compile the project and navigate to your web site in Internet Explorer. To create a MCMS posting 1. Once you have logged into your site, switch to edit mode and click Create New Page. 2. Browse through the Template Gallery and select the template you created in the previous section. The template opens in authoring mode. 3. Click Save and Exit, save the posting as PayStubs.htm, and then click Submit. Your new posting should look like the following: MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 33
34 DEPLOYMENT CONSIDERATIONS In the solution we have presented here, we associated the Windows user name with a SAP employee identifier using the method BAPI_USR01DOHR_GETEMPLOYEE for subsequent calls to the SAP server. Because your SAP implementation may vary from ours, you may need to get this association from another source. Other options include: Active Directory Active directory is fully extensible and provides the ability add custom attributes for Windows users. For more information visit the Microsoft Active Directory web site: tory/default.mspx User Profile Application Block This custom component provided by Microsoft can be used if you want to create a custom profiling solution. For more information, visit the Microsoft.NET Architecture center: Microsoft SharePoint Portal Server SharePoint provides a robust profiling mechanism. For more information visit the Microsoft SharePoint Portal Server web site: Also, it is always good practice to store configuration information in a secure location, and load this information at runtime. For simplicity, we coded this information into the constructor of our pay stub class. This is not a recommended practice. For more information on loading information from a configuration file, consult your Visual Studio.NET documentation. MCMS Integration with SAP / Using MCMS Custom Placeholders and the SAP.NET Connector 34
2730 : Building Microsoft Content Management Server 2002 Solutions
2730 : Building Microsoft Content Management Server 2002 Solutions Introduction This four-day, instructor-led course provides students with the knowledge and skills to plan, implement, develop, and manage
More informationHOL159 Integrating Microsoft Technologies to Microsoft Dynamics AX 4.0. Hands-On Lab
HOL159 Integrating Microsoft Technologies to Microsoft Dynamics AX 4.0 Hands-On Lab Integrating Microsoft Technologies to Microsoft Dynamics AX 4.0 Lab Manual Table of Contents Lab 1: Deploy Enterprise
More informationTutorial SemTalk Version 4.4 SharePoint Integration for SemTalk
Tutorial SemTalk Version 4.4 SharePoint Integration for SemTalk Table of Contents Introduction... 3 Document Management Features... 3 Saving Documents to SharePoint... 5 Open Documents from SharePoint...
More information2559 : Introduction to Visual Basic.NET Programming with Microsoft.NET
2559 : Introduction to Visual Basic.NET Programming with Microsoft.NET Introduction Elements of this syllabus are subject to change. This five-day instructor-led course provides students with the knowledge
More informationDeveloping Microsoft.NET Applications for Windows (Visual Basic.NET)
Developing Microsoft.NET Applications for Windows (Visual Basic.NET) Course Number: 2565 Length: 5 Day(s) Certification Exam This course will help you prepare for the following Microsoft Certified Professional
More informationSECURED PROGRAMMING IN.NET DETAILED TRAINING CONTENT INDUSTRIAL TRAINING PROGRAM ( )
SECURED PROGRAMMING IN.NET DETAILED TRAINING CONTENT INDUSTRIAL TRAINING PROGRAM (2013-2014) MODULE: C# PROGRAMMING CHAPTER 1: INTRODUCING.NET AND C# 1.1 INTRODUCTION TO LANGUAGES C++ C# DIFFERENCES BETWEEN
More informationAccess SAP Business Functions (ABAP) via Web Services
Applies To: SAP R/3 4.6c and ECC 5.0 SAP NetWeaver 04 WebAS 6.40 SP14 and up, XI 3.0 SP14, NWDS 2.0.14 SAP NW2004s WebAS 700, NWDS 7.0.07 Microsoft Visual Studio 2005, BizTalk Server 2006,.NET Framework
More information.NET FRAMEWORK. Visual C#.Net
.NET FRAMEWORK Intro to.net Platform for the.net Drawbacks of Current Trend Advantages/Disadvantages of Before.Net Features of.net.net Framework Net Framework BCL & CLR, CTS, MSIL, & Other Tools Security
More information2609 : Introduction to C# Programming with Microsoft.NET
2609 : Introduction to C# Programming with Microsoft.NET Introduction In this five-day instructor-led course, developers learn the fundamental skills that are required to design and develop object-oriented
More informationLogi Ad Hoc Reporting System Administration Guide
Logi Ad Hoc Reporting System Administration Guide Version 12 July 2016 Page 2 Table of Contents INTRODUCTION... 4 APPLICATION ARCHITECTURE... 5 DOCUMENT OVERVIEW... 6 GENERAL USER INTERFACE... 7 CONTROLS...
More informationProgram Contents: DOTNET TRAINING IN CHENNAI
DOTNET TRAINING IN CHENNAI NET Framework - In today s world of enterprise application development either desktop or Web, one of leaders and visionary is Microsoft.NET technology. The.NET platform also
More informationADO.NET 2.0. database programming with
TRAINING & REFERENCE murach s ADO.NET 2.0 database programming with (Chapter 3) VB 2005 Thanks for downloading this chapter from Murach s ADO.NET 2.0 Database Programming with VB 2005. We hope it will
More informationBook IX. Developing Applications Rapidly
Book IX Developing Applications Rapidly Contents at a Glance Chapter 1: Building Master and Detail Pages Chapter 2: Creating Search and Results Pages Chapter 3: Building Record Insert Pages Chapter 4:
More informationIntroduction to Programming Microsoft.NET Framework Applications with Microsoft Visual Studio 2005 (C#)
Introduction to Programming Microsoft.NET Framework Applications with Microsoft Visual Studio 2005 (C#) Course Number: 4994A Length: 3 Day(s) Certification Exam There are no exams associated with this
More informationM Introduction to C# Programming with Microsoft.NET - 5 Day Course
Module 1: Getting Started This module presents the concepts that are central to the Microsoft.NET Framework and platform, and the Microsoft Visual Studio.NET integrated development environment (IDE); describes
More informationImageNow Interact for Microsoft SharePoint Installation, Setup, and User Guide
ImageNow Interact for Microsoft SharePoint Installation, Setup, and User Guide Version: 6.6.x Written by: Product Documentation, R&D Date: ImageNow and CaptureNow are registered trademarks of Perceptive
More informationToolkit Activity Installation and Registration
Toolkit Activity Installation and Registration Installing the Toolkit activity on the Workflow Server Install the Qfiche Toolkit workflow activity by running the appropriate SETUP.EXE and stepping through
More informationTechNet Home > Products & Technologies > Desktop Products & Technologies > Microsoft Office > SharePoint Portal Server 2003 > Deploy
TechNet Home > Products & Technologies > Desktop Products & Technologies > Microsoft Office > SharePoint Portal Server 2003 > Deploy Reference: http://www.microsoft.com/technet/prodtechnol/office/sps2003/deploy/spst2003.mspx?pf=true
More informationDeployment guide for Duet Enterprise for Microsoft SharePoint and SAP Server 2.0
Deployment guide for Duet Enterprise for Microsoft SharePoint and SAP Server 2.0 Microsoft Corporation Published: October 2012 Author: Microsoft Office System and Servers Team (itspdocs@microsoft.com)
More informationSPARK. User Manual Ver ITLAQ Technologies
SPARK Forms Builder for Office 365 User Manual Ver. 3.5.50.102 0 ITLAQ Technologies www.itlaq.com Table of Contents 1 The Form Designer Workspace... 3 1.1 Form Toolbox... 3 1.1.1 Hiding/ Unhiding/ Minimizing
More informationIntroduction to Microsoft.NET Framework Programming using VS 2005 (C#)
Introduction to Microsoft.NET Framework Programming using VS 2005 (C#) Course Length: 5 Days Course Overview This instructor-led course teaches introductory-level developers who are not familiar with the
More informationASP.NET Web Forms Programming Using Visual Basic.NET
ASP.NET Web Forms Programming Using Visual Basic.NET Duration: 35 hours Price: $750 Delivery Option: Attend training via an on-demand, self-paced platform paired with personal instructor facilitation.
More informationLogi Ad Hoc Reporting System Administration Guide
Logi Ad Hoc Reporting System Administration Guide Version 10.3 Last Updated: August 2012 Page 2 Table of Contents INTRODUCTION... 4 Target Audience... 4 Application Architecture... 5 Document Overview...
More informationGetting Started with the Aloha Community Template for Salesforce Identity
Getting Started with the Aloha Community Template for Salesforce Identity Salesforce, Winter 18 @salesforcedocs Last updated: November 30, 2017 Copyright 2000 2017 salesforce.com, inc. All rights reserved.
More information3 Connecting to Applications
3 Connecting to Applications 3 Connecting to Applications...1 3.1 Prerequisites...1 3.2 Introduction...1 3.2.1 Pega, the Widget Supplier...2 3.2.2 Mega, the Widget Procurer...2 3.3 Create Requisition...3
More informationIDoc based adapterless communication between SAP NetWeaver Application Server (SAP NetWeaver AS) and Microsoft BizTalk Server
Collaboration Technology Support Center Microsoft Collaboration Brief August 2005 IDoc based adapterless communication between SAP NetWeaver Application Server (SAP NetWeaver AS) and Microsoft BizTalk
More informationDeveloping Microsoft.NET Applications for Windows (Visual Basic.NET)
Developing Microsoft.NET Applications for Windows (Visual Basic.NET) Course Number: 2555 Length: 1 Day(s) Certification Exam This course will help you prepare for the following Microsoft Certified Professional
More informationIntegrating SAP Portal Content into Microsoft SharePoint Portal Server
Applies to: SAP NetWeaver 04 SPS15, Portal Development Kit 0 for Microsoft.NET Microsoft Visual Studio.NET 2003 2003 Summary Enabling the integration of portal content created with Portal Development Kit
More informationSAP NetWeaver How-To Guide How To... Configure SAP HANA for CTS
SAP NetWeaver How-To Guide How To... Configure SAP HANA for CTS Applicable Releases: SAP Solution Manager 7.1 SPS05, SAP NetWeaver 7.3 including enhancement package 1, or SAP NetWeaver 7.4 SAP HANA Platform
More informationCookbook for using SQL Server DTS 2000 with.net
Cookbook for using SQL Server DTS 2000 with.net Version: 1.0 revision 15 Last updated: Tuesday, July 23, 2002 Author: Gert E.R. Drapers (GertD@SQLDev.Net) All rights reserved. No part of the contents of
More information2310C VB - Developing Web Applications Using Microsoft Visual Studio 2008 Course Number: 2310C Course Length: 5 Days
2310C VB - Developing Web Applications Using Microsoft Visual Studio 2008 Course Number: 2310C Course Length: 5 Days Certification Exam This course will help you prepare for the following Microsoft Certified
More informationOracle Warehouse Builder 10g Runtime Environment, an Update. An Oracle White Paper February 2004
Oracle Warehouse Builder 10g Runtime Environment, an Update An Oracle White Paper February 2004 Runtime Environment, an Update Executive Overview... 3 Introduction... 3 Runtime in warehouse builder 9.0.3...
More informationTRAINING GUIDE FOR OPC SYSTEMS.NET. Simple steps to successful development and deployment. Step by Step Guide
TRAINING GUIDE FOR OPC SYSTEMS.NET Simple steps to successful development and deployment. Step by Step Guide SOFTWARE DEVELOPMENT TRAINING OPC Systems.NET Training Guide Open Automation Software Evergreen,
More informationIntroducing SAP Enterprise Services Explorer for Microsoft.NET
Introducing SAP Enterprise Services Explorer for Microsoft.NET Applies to: SAP SOA, SAP NetWeaver Composition Environment 7.1 including enhancement package 1, SAP Services Registry, SAP - Microsoft interoperability,
More informationMicrosoft Dynamics GP Web Client Installation and Administration Guide For Service Pack 1
Microsoft Dynamics GP 2013 Web Client Installation and Administration Guide For Service Pack 1 Copyright Copyright 2013 Microsoft. All rights reserved. Limitation of liability This document is provided
More informationChapter 9. Web Applications The McGraw-Hill Companies, Inc. All rights reserved. McGraw-Hill
Chapter 9 Web Applications McGraw-Hill 2010 The McGraw-Hill Companies, Inc. All rights reserved. Chapter Objectives - 1 Explain the functions of the server and the client in Web programming Create a Web
More informationOne of the fundamental kinds of websites that SharePoint 2010 allows
Chapter 1 Getting to Know Your Team Site In This Chapter Requesting a new team site and opening it in the browser Participating in a team site Changing your team site s home page One of the fundamental
More informationDot Net Online Training
chakraitsolutions.com http://chakraitsolutions.com/dotnet-online-training/ Dot Net Online Training DOT NET Online Training CHAKRA IT SOLUTIONS TO LEARN ABOUT OUR UNIQUE TRAINING PROCESS: Title : Dot Net
More informationBringing Together One ASP.NET
Bringing Together One ASP.NET Overview ASP.NET is a framework for building Web sites, apps and services using specialized technologies such as MVC, Web API and others. With the expansion ASP.NET has seen
More informationGetting Started with the Bullhorn SOAP API and C#/.NET
Getting Started with the Bullhorn SOAP API and C#/.NET Introduction This tutorial is for developers who develop custom applications that use the Bullhorn SOAP API and C#. You develop a sample application
More informationCREATION AND CONFIGURATION OF WEB SERVICE FROM RFC AND DEPLOYMENT IN ANOTHER SYSTEM
CREATION AND CONFIGURATION OF WEB SERVICE FROM RFC AND DEPLOYMENT IN ANOTHER SYSTEM Applies to: SAP Summary The purpose of this document is to provide creation and configuration of web service from function
More informationEMC Documentum Composer
EMC Documentum Composer Version 6.5 SP2 User Guide P/N 300-009-462 A01 EMC Corporation Corporate Headquarters: Hopkinton, MA 01748-9103 1-508-435-1000 www.emc.com Copyright 2008 2009 EMC Corporation. All
More informationInstructions for writing Web Services using Microsoft.NET:
Instructions for writing Web Services using Microsoft.NET: Pre-requisites: Operating System: Microsoft Windows XP Professional / Microsoft Windows 2000 Professional / Microsoft Windows 2003 Server.NET
More informationMigrate Your Skills to Microsoft.NET Framework 2.0 and 3.0 using Visual Studio 2005 (C#)
Migrate Your Skills to Microsoft.NET Framework 2.0 and 3.0 using Visual Studio 2005 (C#) Course Length: 5 Days Course Overview This instructor-led course teaches developers to gain in-depth guidance on
More informationBusiness Insight Authoring
Business Insight Authoring Getting Started Guide ImageNow Version: 6.7.x Written by: Product Documentation, R&D Date: August 2016 2014 Perceptive Software. All rights reserved CaptureNow, ImageNow, Interact,
More informationConfiguring SAP Targets and Runtime Users
CHAPTER 4 Before you can create or run processes in your SAP environment, you must create the targets on which the processes will run. Targets are used to define specific environments where activities,
More information.NET-6Weeks Project Based Training
.NET-6Weeks Project Based Training Core Topics 1. C# 2. MS.Net 3. ASP.NET 4. 1 Project MS.NET MS.NET Framework The.NET Framework - an Overview Architecture of.net Framework Types of Applications which
More informationedocs Home > BEA AquaLogic Service Bus 3.0 Documentation > Accessing ALDSP Data Services Through ALSB
Accessing ALDSP 3.0 Data Services Through ALSB 3.0 edocs Home > BEA AquaLogic Service Bus 3.0 Documentation > Accessing ALDSP Data Services Through ALSB Introduction AquaLogic Data Services Platform can
More informationJBoss SOAP Web Services User Guide. Version: M5
JBoss SOAP Web Services User Guide Version: 3.3.0.M5 1. JBoss SOAP Web Services Runtime and Tools support Overview... 1 1.1. Key Features of JBossWS... 1 2. Creating a Simple Web Service... 3 2.1. Generation...
More informationGetting Started with Web Services
Getting Started with Web Services Getting Started with Web Services A web service is a set of functions packaged into a single entity that is available to other systems on a network. The network can be
More informationDatabase Explorer Quickstart
Database Explorer Quickstart Last Revision: Outline 1. Preface 2. Requirements 3. Introduction 4. Creating a Database Connection 1. Configuring a JDBC Driver 2. Creating a Connection Profile 3. Opening
More informationMFP-Link for Sharp. Version 1.0
MFP-Link for Sharp Version 1.0 MFP-Link Introduction... 3 System Overview...3 Installation... 4 Operating System...4 Internet Information Services (IIS) Installation...4.NET Framework 2.0...6 MFP...6
More informationHow to use data sources with databases (part 1)
Chapter 14 How to use data sources with databases (part 1) 423 14 How to use data sources with databases (part 1) Visual Studio 2005 makes it easier than ever to generate Windows forms that work with data
More informationCoveo Platform 6.5. Microsoft SharePoint Connector Guide
Coveo Platform 6.5 Microsoft SharePoint Connector Guide Notice The content in this document represents the current view of Coveo as of the date of publication. Because Coveo continually responds to changing
More informationSolution Composer. User's Guide
Solution Composer User's Guide January 2014 www.lexmark.com Contents 2 Contents Overview...4 Understanding the basics...4 System recommendations...5 Building custom solutions...6 Getting started...6 Step
More informationKentico CMS 6.0 Intranet Administrator's Guide
Kentico CMS 6.0 Intranet Administrator's Guide 2 Kentico CMS 6.0 Intranet Administrator's Guide Table of Contents Introduction 5... 5 About this guide Getting started 7... 7 Installation... 11 Accessing
More informationReal Application Security Administration
Oracle Database Real Application Security Administration Console (RASADM) User s Guide 12c Release 2 (12.2) E85615-01 June 2017 Real Application Security Administration Oracle Database Real Application
More informationGetting Started with EPiServer 4
Getting Started with EPiServer 4 Abstract This white paper includes information on how to get started developing EPiServer 4. The document includes, among other things, high-level installation instructions,
More informationCST272 Getting Started Page 1
CST272 Getting Started Page 1 1 2 3 4 5 6 8 Introduction to ASP.NET, Visual Studio and C# CST272 ASP.NET Static and Dynamic Web Applications Static Web pages Created with HTML controls renders exactly
More informationSAP Disclosure Management Document Version: 10.0 SP SAP Taxonomy Designer
SAP Disclosure Management Document Version: 10.0 SP08-2014-03-13 Table of Contents 1 What is the Taxonomy Designer?.... 4 1.1 Taxonomy Designer Features....4 2 Using the Taxonomy Designer Interface...5
More informationVisual Composer for NetWeaver CE: Getting Started with a Typical Workflow
Visual Composer for NetWeaver CE: Getting Started with a Typical Workflow Applies to: Visual Composer for SAP NetWeaver Composition Environment 7.1 Summary This article aims to help you get started modeling
More informationWalkthrough Using the New CLR Interop Feature of Microsoft Dynamics AX
Walkthrough Using the New CLR Interop Feature of Microsoft Dynamics AX Walkthrough Using the New CLR Interop Feature of Microsoft Dynamics AX Lab Manual Table of Contents Lab 1: CLR Interop... 1 Lab Objective...
More informationEMC Documentum Composer
EMC Documentum Composer Version 6.0 SP1.5 User Guide P/N 300 005 253 A02 EMC Corporation Corporate Headquarters: Hopkinton, MA 01748 9103 1 508 435 1000 www.emc.com Copyright 2008 EMC Corporation. All
More informationContents Getting Started... 3 About Scribe Online and Connectors... 3 Scribe Online Services... 3 CDK Components... 3 Audience... 4 Prerequisites...
Contents Getting Started... 3 About Scribe Online and Connectors... 3 Scribe Online Services... 3 CDK Components... 3 Audience... 4 Prerequisites... 4 Requirements... 4 CDK Workflow... 5 Scribe Online
More informationIFS TOUCH APPS SERVER INSTALLATION GUIDE
IFS TOUCH APPS SERVER INSTALLATION GUIDE ABSTRACT IFS Touch Apps Server is an On Premise version of the IFS Touch Apps Cloud. The On Premise version doesn t need a separate installation of the IFS Cloud
More informationYou can use Dreamweaver to build master and detail Web pages, which
Chapter 1: Building Master and Detail Pages In This Chapter Developing master and detail pages at the same time Building your master and detail pages separately Putting together master and detail pages
More informationAlchemex. Web Reporting. Learning Services Alchemex Web Module
Alchemex Web Reporting 1 Table of Contents About The Web Module... 1 Web Module Benefits and Features... 3 Product Features... 3 Product Benefits... 3 Customer Benefits... 3 How It Works... 4 Users Guide...
More informationGet Started on SOA. People Entry Point Interaction and Collaboration Services. Case for an SOA Portal
Get Started on SOA People Entry Point Interaction and Collaboration Services Case for an SOA Our customers are our highest priorities; our employees are our highest cost We need to make our employees more
More informationCOPYRIGHTED MATERIAL. Contents. Part I: C# Fundamentals 1. Chapter 1: The.NET Framework 3. Chapter 2: Getting Started with Visual Studio
Introduction XXV Part I: C# Fundamentals 1 Chapter 1: The.NET Framework 3 What s the.net Framework? 3 Common Language Runtime 3.NET Framework Class Library 4 Assemblies and the Microsoft Intermediate Language
More informationDeltek Costpoint CRM 6.2. Custom Reports and Microsoft SQL Server Reporting Services
Deltek Costpoint CRM 6.2 Custom Reports and Microsoft SQL Server Reporting November 11, 2011 While Deltek has attempted to verify that the information in this document is accurate and complete, some typographical
More informationConfiguring External Links in Visual Discovery AE
Copyright 2014 WebFOCUS Release 8.0 Version 08 July 2014 Technical Memo Information Builders Two Penn Plaza New York, NY 10121-2898 (212) 736-4433 TM4742 Configuring External Links in Visual Discovery
More informationBEAAquaLogic Enterprise Repository. Automation for Web Services Guide
BEAAquaLogic Enterprise Repository Automation for Web Services Guide Version 3.0. RP1 Revised: February, 2008 Table of Contents Overview System Settings Properties for Managing WSDL- and UDDI-Related
More informationQ&As. Microsoft MTA Software Development Fundamentals. Pass Microsoft Exam with 100% Guarantee
98-361 Q&As Microsoft MTA Software Development Fundamentals Pass Microsoft 98-361 Exam with 100% Guarantee Free Download Real Questions & Answers PDF and VCE file from: 100% Passing Guarantee 100% Money
More informationReceiving PeopleSoft Message (PeopleTools 8.17) through the Oracle AS PeopleSoft Adapter. An Oracle White Paper September 2008
Receiving PeopleSoft Message (PeopleTools 8.17) through the Oracle AS PeopleSoft Adapter An Oracle White Paper September 2008 Receiving PeopleSoft Message (PeopleTools 8.17) through the Oracle AS PeopleSoft
More informationThe contents of this document are directly taken from the EPiServer SDK. Please see the SDK for further technical information about EPiServer.
Web Services Product version: 4.50 Document version: 1.0 Document creation date: 04-05-2005 Purpose The contents of this document are directly taken from the EPiServer SDK. Please see the SDK for further
More informationSharePoint Portal Server 2003 Advanced Migration Scenarios
SharePoint Portal Server 2003 Advanced Migration Scenarios White Paper Published: March 2004 Table of Contents Introduction 1 Related White Papers 1 Background 2 SharePoint Portal Server 2003 Document
More informationSOA Software Intermediary for Microsoft : Install Guide
SOA Software Intermediary for Microsoft : Install Guide SOA Software Intermediary for Microsoft Install Guide SOAIM_60 August 2013 Copyright Copyright 2013 SOA Software, Inc. All rights reserved. Trademarks
More informationMicrosoft Windows Servers 2012 & 2016 Families
Version 8 Installation Guide Microsoft Windows Servers 2012 & 2016 Families 2301 Armstrong St, Suite 2111, Livermore CA, 94551 Tel: 925.371.3000 Fax: 925.371.3001 http://www.imanami.com Installation Guide
More informationGetting Started with EPiServer 4
Getting Started with EPiServer 4 Abstract This white paper includes information on how to get started developing EPiServer 4. The document includes, among other things, high-level installation instructions,
More informationUser Scripting April 14, 2018
April 14, 2018 Copyright 2013, 2018, Oracle and/or its affiliates. All rights reserved. This software and related documentation are provided under a license agreement containing restrictions on use and
More informationMYOB Advanced Business
MYOB Advanced Business On-Premise Installation Last Updated: 24 November 2014 Contents Introduction 1 Pre-Requisites 1 Web Browsers... 1 Server Hardware and Software... 1 Database Hardware and Software...
More informationIQSweb Installation Instructions Version 5.0
IQSweb Installation Instructions Version 5.0 Contents Additional References... 3 IQSweb ROSS Connection... 3 IQSweb V5.0 Install/Upgrade Scenarios... 4 IQSweb Configuration Options... 5 A. Single Computer/Server
More informationEMS DESKTOP CLIENT Installation Guide
EMS DESKTOP CLIENT Installation Guide Version 44.1 Last Updated: March 5, 2018 EMS Software emssoftware.com/help 800.440.3994 2018 EMS Software, LLC. All Rights Reserved. Table of Contents CHAPTER 1: Introduction
More informationForeScout Open Integration Module: Data Exchange Plugin
ForeScout Open Integration Module: Data Exchange Plugin Version 3.2.0 Table of Contents About the Data Exchange Plugin... 4 Requirements... 4 CounterACT Software Requirements... 4 Connectivity Requirements...
More informationImportant notice regarding accounts used for installation and configuration
System Requirements Operating System Nintex Reporting 2008 can be installed on Microsoft Windows Server 2003 or 2008 (32 and 64 bit supported for both OS versions). Browser Client Microsoft Internet Explorer
More informationM Introduction to Visual Basic.NET Programming with Microsoft.NET 5 Day Course
Module 1: Getting Started This module introduces Visual Basic.NET and explains how it fits into the.net platform. It explains how to use the programming tools in Microsoft Visual Studio.NET and provides
More informationNew World ERP-eSuite
New World ERP-eSuite 2018.1 INSTALLATION GUIDE April 9, 2018 Review important information for installing this release: SSL is required for esuite Services and Website servers. 2018 Tyler Technologies.
More informationms-help://ms.technet.2004apr.1033/win2ksrv/tnoffline/prodtechnol/win2ksrv/howto/grpolwt.htm
Page 1 of 17 Windows 2000 Server Step-by-Step Guide to Understanding the Group Policy Feature Set Operating System Abstract Group Policy is the central component of the Change and Configuration Management
More informationQuick Web Development using JDeveloper 10g
Have you ever experienced doing something the long way and then learned about a new shortcut that saved you a lot of time and energy? I can remember this happening in chemistry, calculus and computer science
More informationMy Enterprise Guide David Shannon, Amadeus Software Limited, UK
Paper 169-31 My Enterprise Guide David Shannon, Amadeus Software Limited, UK ABSTRACT Following on from My Computer and My Documents, users of SAS can now also have My Enterprise Guide! The aim of this
More informationModule Overview. Monday, January 30, :55 AM
Module 11 - Extending SQL Server Integration Services Page 1 Module Overview 12:55 AM Instructor Notes (PPT Text) Emphasize that this module is not designed to teach students how to be professional SSIS
More informationNintex Forms 2010 Help
Nintex Forms 2010 Help Last updated: Monday, April 20, 2015 1 Administration and Configuration 1.1 Licensing settings 1.2 Activating Nintex Forms 1.3 Web Application activation settings 1.4 Manage device
More informationImageNow eforms. Getting Started Guide. ImageNow Version: 6.7. x
ImageNow eforms Getting Started Guide ImageNow Version: 6.7. x Written by: Product Documentation, R&D Date: September 2016 2014 Perceptive Software. All rights reserved CaptureNow, ImageNow, Interact,
More informationUnified Task List Developer Pack
Unified Task List Developer Pack About the Developer Pack The developer pack is provided to allow customization of the UTL set of portlets and deliver an easy mechanism of developing task processing portlets
More informationContents. Microsoft is a registered trademark of Microsoft Corporation. TRAVERSE is a registered trademark of Open Systems Holdings Corp.
TPLWPT Contents Summary... 1 General Information... 1 Technology... 2 Server Technology... 2 Business Layer... 4 Client Technology... 4 Structure... 4 Ultra-Thin Client Considerations... 7 Internet and
More informationSAP NetWeaver ABAP and Adobe Forms. Franklin Herbas Thomas Jung SAP NetWeaver Product Management SAP Labs
SAP NetWeaver ABAP and Adobe Forms Franklin Herbas Thomas Jung SAP NetWeaver Product Management SAP Labs Introduction Technology Integrated Solutions Adobe Print Forms - Demo Interactive Forms Based on
More informationOneStop Reporting 4.5 OSR Administration User Guide
OneStop Reporting 4.5 OSR Administration User Guide Doc. Version 1.2 Updated: 10-Dec-14 Copyright OneStop Reporting AS Contents Introduction... 1 Who should read this manual... 1 What s included in this
More informationManipulating Database Objects
Manipulating Database Objects Purpose This tutorial shows you how to manipulate database objects using Oracle Application Express. Time to Complete Approximately 30 minutes. Topics This tutorial covers
More informationVB.NET. Exercise 1: Creating Your First Application in Visual Basic.NET
VB.NET Module 1: Getting Started This module introduces Visual Basic.NET and explains how it fits into the.net platform. It explains how to use the programming tools in Microsoft Visual Studio.NET and
More informationPRO: Designing and Developing Microsoft SharePoint 2010 Applications
PRO: Designing and Developing Microsoft SharePoint 2010 Applications Number: 70-576 Passing Score: 700 Time Limit: 120 min File Version: 1.0 http://www.gratisexam.com/ Exam A QUESTION 1 You are helping
More information