跟SAP系统集成的Android应用

首先吐槽一点,这是我的第一个Android应用,很糙。

这个应用适合于上了SAP系统的企业内部使用,并且限于制造型MTO模式,需要针对生产订单报工操作的场景,因为此应用主要的一个目的,就是用来方便报工操作的。

为此,先上一幅程序目录结构全图:

跟SAP系统集成的Android应用

下面将按源文件、资源文件、程序目录清单文件依次介绍:

源文件分为三个包:SAP业务逻辑操作包、对象实体包、工具包(包含访问SAP连接)

SAP业务逻辑操作包: com.fungchoi.sap

对象实体包: com.fungchoi.sap.entity

工具包: com.fungchoi.sap.util

 

SAP业务逻辑操作包按照业务逻辑顺序一共包含有8个程序文件,分别介绍如下:

应用登录:LoginActivity.java:

/**

 * 用户登录类

 */

package com.fungchoi.sap;



import java.lang.Thread.State;

import java.util.ArrayList;

import java.util.List;



import org.apache.http.message.BasicNameValuePair;



import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;



import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;



/**

 * @author Administrator

 * 

 */

public class LoginActivity extends Activity {



	private Activity activity;



	private EditText txtUserName;

	private EditText txtPassword;

	private Button btnLogin;



	private ProgressDialog pd;



	private PassParameter pp;



	/** Called when the activity is first created. */

	@Override

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.login);



		// 当前活动

		activity = this;

		// 传递参数

		pp = new PassParameter();

		// 设置用户手机号码

		pp.setLTXA1(Helper.getPhoneNumber(activity));



		// 界面控件

		txtUserName = (EditText) this.findViewById(R.id.txtUserName);

		txtPassword = (EditText) this.findViewById(R.id.txtPassword);

		btnLogin = (Button) this.findViewById(R.id.btnLogin);



		// 判断网络连接

		if (!Helper.checkNet(this)) {

			Helper.message(this, "没有可用的3G或Wifi网络!");

			Helper.disenableButton(btnLogin);

			return;

		}



		// 将当前活动压入活动堆栈

		MyApplication.getInstance().addActivity(this);



		// 登录按钮注册事件

		btnLogin.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				// 设置用户帐号和密码

				pp.setUserName(txtUserName.getText().toString().trim());

				pp.setPassword(txtPassword.getText().toString().trim());



				// 设置正在处理窗口

				pd = ProgressDialog.show(activity, "提示", "正在登录,请稍候...");



				// 启动线程

				if (thread.getState() == State.NEW) {

					thread.start();

				} else {

					thread.run();

				}

			}

		});

	}



	// 工作线程

	private Thread thread = new Thread() {

		@Override

		public void run() {

			// 从SAP系统获取数据

			String result = getJSONString(pp);



			Message message = handler.obtainMessage();

			Bundle b = new Bundle();

			b.putString("flag", result);

			message.setData(b);

			handler.sendMessage(message);

		}

	};



	// 更新UI

	private Handler handler = new Handler() {

		public void handleMessage(Message msg) {

			pd.dismiss();

			if ("success".equals(msg.getData().getString("flag"))) {

				Helper.enableButton(btnLogin);

				// thread.stop();

				// 成功登录,则跳转至开始报工界面

				dispatch(pp);

			} else {

				Helper.message(activity, "帐号或者密码错误!\n登录失败 !");

				thread.stop();

			}

		}

	};



	// 从SAP服务器获取内容(JSON字符串)

	private String getJSONString(PassParameter pp) {

		String url = Helper.getUrl("service0000");

		List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();

		pairs.add(new BasicNameValuePair("UserName", pp.getUserName()));

		pairs.add(new BasicNameValuePair("Password", pp.getPassword()));

		return Helper.callSAPService(pp, url, pairs);

	}



	// 跳转到下一个Activity

	private void dispatch(PassParameter pp) {

		Intent intent = new Intent(this, MainActivity.class);

		Bundle bundle = new Bundle();

		bundle.putSerializable(PassParameter.PP_KEY, pp);

		intent.putExtras(bundle);



		startActivity(intent);

	}

}

应用主界面(生产订单查询界面): MainActivity.java

package com.fungchoi.sap;



import java.util.Calendar;

import java.util.Locale;



import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;



import android.app.Activity;

import android.app.DatePickerDialog;

import android.content.Intent;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnFocusChangeListener;

import android.widget.Button;

import android.widget.DatePicker;

import android.widget.EditText;



public class MainActivity extends Activity {

	private Activity activity;



	private EditText tempDate;

	private EditText txtBeginDate;

	private EditText txtEndDate;

	private EditText txtOrderCode;

	private EditText txtMaterialDesc;



	private int mYear;

	private int mMonth;

	private int mDay;



	private PassParameter pp;



	/** Called when the activity is first created. */

	@Override

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);



		// 判断手机电量

		Helper.checkBattery(this);



		// 将当前活动压入活动堆栈

		MyApplication.getInstance().addActivity(this);



		// 当前活动

		activity = this;



		// 从意图里面接收上一个Activity传过来的数据

		Intent intent = this.getIntent();

		pp = (PassParameter) intent.getSerializableExtra(PassParameter.PP_KEY);



		// 获取当前日期实例

		final Calendar c = Calendar.getInstance(Locale.CHINA);

		mYear = c.get(Calendar.YEAR);

		mMonth = c.get(Calendar.MONTH);

		mDay = c.get(Calendar.DAY_OF_MONTH);



		// 界面控件

		txtBeginDate = (EditText) this.findViewById(R.id.txtBeginDate);

		txtEndDate = (EditText) this.findViewById(R.id.txtEndDate);

		// 设置默认日期

		Helper.updateDate(txtEndDate, mYear, mMonth, mDay);

		setBeginDate(c, -2);

		// 注册日期控件监听事件

		registerEvents();



		// 界面控件

		txtOrderCode = (EditText) this.findViewById(R.id.txtOrderCode);

		txtMaterialDesc = (EditText) this.findViewById(R.id.txtMatnr);



		// 按下返回键返回到上一个界面

		Button previous = (Button) this.findViewById(R.id.btnPrevious00);

		previous.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				Helper.simulateKey(KeyEvent.KEYCODE_BACK);

			}

		});

		// 开始报工按钮,并注册监听事件

		Button btnStart = (Button) this.findViewById(R.id.btnStart);

		btnStart.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				pp.setBeginDate(txtBeginDate.getText().toString()

						.replaceAll("-", ""));

				pp.setEndDate(txtEndDate.getText().toString()

						.replaceAll("-", ""));

				pp.setOrderCode(txtOrderCode.getText().toString().trim());

				pp.setMaterialDesc(txtMaterialDesc.getText().toString().trim());

				dispatch(pp);

			}

		});

	}



	// 日期控件

	private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

		public void onDateSet(DatePicker view, int year, int monthOfYear,

				int dayOfMonth) {

			mYear = year;

			mMonth = monthOfYear;

			mDay = dayOfMonth;



			Helper.updateDate(tempDate, mYear, mMonth, mDay);

		}

	};



	// 显示日期控件

	private void showDialog() {

		DatePickerDialog dialog = new DatePickerDialog(this, mDateSetListener,

				mYear, mMonth, mDay);



		dialog.show();

	}



	// 注册事件

	private void registerEvents() {

		txtBeginDate.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				Helper.hideIM(activity, v);

				tempDate = txtBeginDate;

				showDialog();

			}

		});

		txtEndDate.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				Helper.hideIM(activity, v);

				tempDate = txtEndDate;

				showDialog();

			}

		});

		txtBeginDate.setOnFocusChangeListener(new OnFocusChangeListener() {

			public void onFocusChange(View v, boolean hasFocus) {

				if (hasFocus == true) {

					Helper.hideIM(activity, v);

					tempDate = txtBeginDate;

					showDialog();

				}

			}

		});

		txtEndDate.setOnFocusChangeListener(new OnFocusChangeListener() {

			public void onFocusChange(View v, boolean hasFocus) {

				if (hasFocus == true) {

					Helper.hideIM(activity, v);

					tempDate = txtEndDate;

					showDialog();

				}

			}

		});

	}



	// 跳转到下一个Activity

	private void dispatch(PassParameter pp) {

		Intent intent = new Intent(this, OrderListActivity.class);

		Bundle bundle = new Bundle();

		bundle.putSerializable(PassParameter.PP_KEY, pp);

		intent.putExtras(bundle);



		startActivity(intent);

	}



	// 设置开始日期

	private void setBeginDate(Calendar c, int val) {

		c.add(Calendar.DATE, val);

		int year = c.get(Calendar.YEAR);

		int month = c.get(Calendar.MONTH);

		int day = c.get(Calendar.DAY_OF_MONTH);

		txtBeginDate.setText(new StringBuilder().append(year).append("-")

				.append((month + 1) < 10 ? "0" + (month + 1) : (month + 1))

				.append("-").append((day < 10) ? "0" + day : day));

	}



}

生产订单列表选择界面: OrderListActivity.java

/**

 * 生产订单列表选择类

 */

package com.fungchoi.sap;



import java.lang.Thread.State;

import java.lang.reflect.Type;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;



import org.apache.http.message.BasicNameValuePair;



import com.fungchoi.sap.entity.Order;

import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;



import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.KeyEvent;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.HorizontalScrollView;

import android.widget.RadioButton;

import android.widget.ScrollView;

import android.widget.TableLayout;

import android.widget.TableRow;

import android.widget.TextView;



/**

 * @author Administrator

 * 

 */

public class OrderListActivity extends Activity {

	private final int FP = ViewGroup.LayoutParams.FILL_PARENT;

	private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;



	private Activity activity;



	private ScrollView sv;

	private HorizontalScrollView hsv;

	private TableLayout tab;



	private PassParameter pp;

	private LinkedList<Order> orders;



	private ProgressDialog pd;

	private Button previous;

	private Button next;



	/**

	 * 

	 */

	public OrderListActivity() {

		// TODO Auto-generated constructor stub

	}



	// @SuppressWarnings("static-access")

	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		this.setContentView(R.layout.orderlist);



		// 当前活动

		activity = this;



		// 将当前活动压入活动堆栈

		MyApplication.getInstance().addActivity(this);



		// 获取界面控件对象

		sv = (ScrollView) this.findViewById(R.id.scrollView1);

		sv.setHorizontalScrollBarEnabled(true);

		hsv = (HorizontalScrollView) this

				.findViewById(R.id.horizontalScrollView1);

		tab = (TableLayout) hsv.getChildAt(0);



		// 按下返回键返回到上一个界面

		previous = (Button) this.findViewById(R.id.btnPrevious01);

		previous.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				Helper.simulateKey(KeyEvent.KEYCODE_BACK);

			}

		});

		// 按下一步跳转到工序选择界面

		next = (Button) this.findViewById(R.id.btnNext01);

		next.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				// 跳转到下一步之前判断是否选择了生产订单

				if (!Helper.checkRadioButton(tab)) {

					Helper.message(activity, "请选择一笔生产订单!");

					return;

				}

				dispatch(pp);

			}

		});



		// 从意图里面接收上一个Activity传过来的数据

		Intent intent = this.getIntent();

		pp = (PassParameter) intent.getSerializableExtra(PassParameter.PP_KEY);



		// 设置正在处理窗口

		pd = ProgressDialog.show(this, "提示", "正在处理,请稍候...");



		// 启动线程

		if (thread.getState() == State.NEW) {

			thread.start();

		} else {

			thread.run();

		}

	}



	// 工作线程

	private Thread thread = new Thread() {

		@Override

		public void run() {

			// 从SAP系统获取数据

			String result = getJSONString(pp);

			orders = parseFromJson(result);



			Message message = handler.obtainMessage();

			Bundle b = new Bundle();

			b.putString("flag", "ok");

			message.setData(b);

			handler.sendMessage(message);

		}

	};



	// 更新UI

	private Handler handler = new Handler() {

		public void handleMessage(Message msg) {

			Helper.enableButton(next);

			if ("ok".equals(msg.getData().getString("flag"))) {

				// 动态添加数据记录

				addRows(orders);

				pd.dismiss();

				thread.stop();

			}

		}

	};



	// 从SAP服务器获取内容(JSON字符串)

	private String getJSONString(PassParameter pp) {

		String url = Helper.getUrl("service0001");

		List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();

		pairs.add(new BasicNameValuePair("BeginDate", pp.getBeginDate()));

		pairs.add(new BasicNameValuePair("EndDate", pp.getEndDate()));

		pairs.add(new BasicNameValuePair("OrderCode", pp.getOrderCode()));

		pairs.add(new BasicNameValuePair("MaterialDesc", pp.getMaterialDesc()));

		return Helper.callSAPService(pp, url, pairs);

	}



	// 根据JSON字符串解析成订单实体对象列表

	private LinkedList<Order> parseFromJson(String jsonData) {

		if (jsonData == null)

			return null;

		if ("".equals(jsonData))

			return null;

		Type listType = new TypeToken<LinkedList<Order>>() {

		}.getType();

		Gson gson = new Gson();

		LinkedList<Order> entitys = gson.fromJson(jsonData, listType);

		return entitys;

	}



	// 根据读取的记录动态添加列表行

	private Boolean addRows(LinkedList<Order> orders) {

		if (orders == null) {

			Helper.disenableButton(next);

			return false;

		}

		if (orders.isEmpty()) {

			Helper.disenableButton(next);

			return false;

		}



		TableRow row;

		TextView view;

		RadioButton radio;



		for (Order order : orders) {

			row = new TableRow(this);



			radio = new RadioButton(this);

			radio.setOnClickListener(new View.OnClickListener() {

				public void onClick(View v) {

					changedRadio((RadioButton) v);

				}

			});

			row.addView(radio);



			view = new TextView(this);

			view.setText(order.getAUFNR());

			row.addView(view);



			view = new TextView(this);

			view.setText(order.getMAKTX());

			row.addView(view);



			view = new TextView(this);

			view.setText(String.valueOf(order.getGAMNG()));

			row.addView(view);



			view = new TextView(this);

			view.setText(order.getMSEHT());

			row.addView(view);



			tab.addView(row, new TableLayout.LayoutParams(FP, WC));

		}

		return true;

	}



	// 当更改单选按钮时,获它所在行的订单编号及将其他的单选按钮置为未选中状态

	private void changedRadio(RadioButton rb) {

		int count = tab.getChildCount();

		TableRow row;

		RadioButton radio;

		for (int i = 1; i < count; i++) {

			row = (TableRow) tab.getChildAt(i);

			radio = (RadioButton) row.getChildAt(0);

			if (rb.equals(radio)) {

				pp.setAUFNR(((TextView) row.getChildAt(1)).getText().toString());

			} else {

				if (radio.isChecked()) {

					radio.setChecked(false);

				}

			}

		}

	}



	// 跳转到下一个Activity

	private void dispatch(PassParameter pp) {

		Intent intent = new Intent(this, StepListActivity.class);

		Bundle bundle = new Bundle();

		bundle.putSerializable(PassParameter.PP_KEY, pp);

		intent.putExtras(bundle);



		startActivity(intent);

	}



}

工序列表选择界面:StepListActivity.java :

/**

 * 

 */

package com.fungchoi.sap;



import java.lang.Thread.State;

import java.lang.reflect.Type;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;



import org.apache.http.message.BasicNameValuePair;



import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.entity.Step;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;



import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.text.InputType;

import android.view.KeyEvent;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.EditText;

import android.widget.HorizontalScrollView;

import android.widget.RadioButton;

import android.widget.ScrollView;

import android.widget.TableLayout;

import android.widget.TableRow;

import android.widget.TextView;



/**

 * @author Administrator

 * 

 */

public class StepListActivity extends Activity {

	private final int FP = ViewGroup.LayoutParams.FILL_PARENT;

	private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;



	private Activity activity;



	private ScrollView sv;

	private HorizontalScrollView hsv;

	private TableLayout tab;



	private PassParameter pp;

	private LinkedList<Step> steps;



	private ProgressDialog pd;

	private Button previous;

	private Button next;



	/**

	 * 

	 */

	public StepListActivity() {

		// TODO Auto-generated constructor stub

	}



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		this.setContentView(R.layout.steplist);



		// 当前活动

		activity = this;



		// 将当前活动压入活动堆栈

		MyApplication.getInstance().addActivity(this);



		// 获取界面控件对象

		sv = (ScrollView) this.findViewById(R.id.scrollView2);

		sv.setHorizontalScrollBarEnabled(true);

		hsv = (HorizontalScrollView) this

				.findViewById(R.id.horizontalScrollView2);

		tab = (TableLayout) hsv.getChildAt(0);



		// 按下返回键返回到上一个界面

		previous = (Button) this.findViewById(R.id.btnPrevious02);

		previous.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				Helper.simulateKey(KeyEvent.KEYCODE_BACK);

			}

		});

		// 按下一步跳转到工序选择界面

		next = (Button) this.findViewById(R.id.btnNext02);

		next.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				// 跳转到下一步之前判断是否选择了工序

				if (!Helper.checkRadioButton(tab)) {

					Helper.message(activity, "请选择一道工序!");

					return;

				}

				dispatch(pp);

			}

		});



		// 从意图里面接收上一个Activity传过来的数据

		Intent intent = this.getIntent();

		pp = (PassParameter) intent.getSerializableExtra(PassParameter.PP_KEY);



		// 设置正在处理窗口

		pd = ProgressDialog.show(this, "提示", "正在处理,请稍候...");



		// 启动线程

		if (thread.getState() == State.NEW) {

			thread.start();

		} else {

			thread.run();

		}

	}



	// 工作线程

	private Thread thread = new Thread() {

		@Override

		public void run() {

			// 从SAP系统获取数据

			String result = getJSONString(pp);

			steps = parseFromJson(result);



			Message message = handler.obtainMessage();

			Bundle b = new Bundle();

			b.putString("flag", "ok");

			message.setData(b);

			handler.sendMessage(message);

		}

	};



	// 更新UI

	private Handler handler = new Handler() {

		public void handleMessage(Message msg) {

			Helper.enableButton(next);

			if ("ok".equals(msg.getData().getString("flag"))) {

				// 动态添加数据记录

				addRows();

				pd.dismiss();

				thread.stop();

			}

		}

	};



	// 从SAP服务器获取内容(JSON字符串)

	private String getJSONString(PassParameter pp) {

		String url = Helper.getUrl("service0002");

		List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();

		pairs.add(new BasicNameValuePair("OrderCode", pp.getAUFNR()));

		return Helper.callSAPService(pp, url, pairs);

	}



	// 根据JSON字符串解析成订单实体对象列表

	private LinkedList<Step> parseFromJson(String jsonData) {

		if (jsonData == null)

			return null;

		if ("".equals(jsonData))

			return null;

		Type listType = new TypeToken<LinkedList<Step>>() {

		}.getType();

		Gson gson = new Gson();

		LinkedList<Step> entitys = gson.fromJson(jsonData, listType);

		return entitys;

	}



	// 根据读取的记录动态添加列表行

	private Boolean addRows() {

		if (steps == null) {

			Helper.disenableButton(next);

			return false;

		}

		if (steps.isEmpty()) {

			Helper.disenableButton(next);

			return false;

		}



		TableRow row;

		TextView view;

		EditText edit;

		RadioButton radio;



		for (Step step : steps) {

			row = new TableRow(this);



			radio = new RadioButton(this);

			radio.setOnClickListener(new View.OnClickListener() {

				public void onClick(View v) {

					changedRadio((RadioButton) v);

				}

			});

			row.addView(radio);



			view = new TextView(this);

			view.setText(step.getVORNR());

			row.addView(view);



			view = new TextView(this);

			view.setText(step.getLTXA1());

			row.addView(view);



			edit = new EditText(this);

			edit.setInputType(InputType.TYPE_CLASS_NUMBER);

			edit.setText(String.valueOf(step.getMGVRG()));

			row.addView(edit);



			view = new TextView(this);

			view.setText(step.getMSEHT());

			row.addView(view);



			view = new TextView(this);

			view.setVisibility(View.INVISIBLE);

			view.setText(step.getMEINH());

			row.addView(view);



			tab.addView(row, new TableLayout.LayoutParams(FP, WC));

		}

		return true;

	}



	// 当更改单选按钮时,获它所在行的订单编号及将其他的单选按钮置为未选中状态

	private void changedRadio(RadioButton rb) {

		int count = tab.getChildCount();

		TableRow row;

		RadioButton radio;

		for (int i = 1; i < count; i++) {

			row = (TableRow) tab.getChildAt(i);

			radio = (RadioButton) row.getChildAt(0);

			if (rb.equals(radio)) {

				pp.setVORNR(((TextView) row.getChildAt(1)).getText().toString());

				pp.setLMNGA(Float.parseFloat(((TextView) row.getChildAt(3))

						.getText().toString().trim()));

				pp.setMEINH(((TextView) row.getChildAt(5)).getText().toString());

			} else {

				if (radio.isChecked()) {

					radio.setChecked(false);

				}

			}

		}

	}



	// 重新设置传递参数中的(选中工序的)工序数量

	private void resetLMNGA() {

		int count = tab.getChildCount();

		TableRow row;

		RadioButton radio;

		for (int i = 1; i < count; i++) {

			row = (TableRow) tab.getChildAt(i);

			radio = (RadioButton) row.getChildAt(0);

			if (radio.isChecked()) {

				pp.setLMNGA(Float.parseFloat(((TextView) row.getChildAt(3))

						.getText().toString().trim()));

				break;

			}

		}

	}



	// 跳转到下一个Activity

	private void dispatch(PassParameter pp) {

		resetLMNGA();



		Intent intent = new Intent(this, ZuoYeActivity.class);

		Bundle bundle = new Bundle();

		bundle.putSerializable(PassParameter.PP_KEY, pp);

		intent.putExtras(bundle);



		startActivity(intent);

	}



}

作业输入界面:ZuoYeActivity.java:

/**

 * 

 */

package com.fungchoi.sap;



import java.lang.Thread.State;

import java.lang.reflect.Type;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;



import org.apache.http.message.BasicNameValuePair;



import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.entity.ZuoYe;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;



import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.KeyEvent;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;



/**

 * @author Administrator

 * 

 */

public class ZuoYeActivity extends Activity {



	private PassParameter pp;

	private LinkedList<ZuoYe> zuoyes;



	private ProgressDialog pd;

	private Button previous;

	private Button next;



	private EditText vgw01;

	private EditText vgw02;

	private EditText vgw03;

	private EditText vgw04;

	private EditText vgw05;

	private EditText vgw06;

	private EditText vge01;

	private EditText vge02;

	private EditText vge03;

	private EditText vge04;

	private EditText vge05;

	private EditText vge06;



	/**

	 * 

	 */

	public ZuoYeActivity() {

		// TODO Auto-generated constructor stub

	}



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		this.setContentView(R.layout.zuoye);



		MyApplication.getInstance().addActivity(this);



		vgw01 = (EditText) this.findViewById(R.id.txtVgw01);

		vgw02 = (EditText) this.findViewById(R.id.txtVgw02);

		vgw03 = (EditText) this.findViewById(R.id.txtVgw03);

		vgw04 = (EditText) this.findViewById(R.id.txtVgw04);

		vgw05 = (EditText) this.findViewById(R.id.txtVgw05);

		vgw06 = (EditText) this.findViewById(R.id.txtVgw06);

		vge01 = (EditText) this.findViewById(R.id.txtVge01);

		vge02 = (EditText) this.findViewById(R.id.txtVge02);

		vge03 = (EditText) this.findViewById(R.id.txtVge03);

		vge04 = (EditText) this.findViewById(R.id.txtVge04);

		vge05 = (EditText) this.findViewById(R.id.txtVge05);

		vge06 = (EditText) this.findViewById(R.id.txtVge06);



		// 按下返回键返回到上一个界面

		previous = (Button) this.findViewById(R.id.btnPrevious03);

		previous.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				Helper.simulateKey(KeyEvent.KEYCODE_BACK);

			}

		});

		// 按下一步跳转到工序选择界面

		next = (Button) this.findViewById(R.id.btnNext03);

		next.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				dispatch(pp);

			}

		});



		// 从意图里面接收上一个Activity传过来的数据

		Intent intent = this.getIntent();

		pp = (PassParameter) intent.getSerializableExtra(PassParameter.PP_KEY);



		// 设置正在处理窗口

		pd = ProgressDialog.show(this, "提示", "正在处理,请稍候...");



		// 启动线程

		if (thread.getState() == State.NEW) {

			thread.start();

		} else {

			thread.run();

		}

	}



	// 工作线程

	private Thread thread = new Thread() {

		@Override

		public void run() {

			// 从SAP系统获取数据

			String result = getJSONString(pp);

			zuoyes = parseFromJson(result);



			Message message = handler.obtainMessage();

			Bundle b = new Bundle();

			b.putString("flag", "ok");

			message.setData(b);

			handler.sendMessage(message);

		}

	};



	// 更新UI

	private Handler handler = new Handler() {

		public void handleMessage(Message msg) {

			if ("ok".equals(msg.getData().getString("flag"))) {

				// 设置默认值

				setDefaultValue();

				pd.dismiss();

				thread.stop();

			}

		}

	};



	// 从SAP服务器获取内容(JSON字符串)

	private String getJSONString(PassParameter pp) {

		String url = Helper.getUrl("service0003");

		List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();

		pairs.add(new BasicNameValuePair("OrderCode", pp.getAUFNR()));

		pairs.add(new BasicNameValuePair("StepCode", pp.getVORNR()));

		pairs.add(new BasicNameValuePair("Quantity", String.valueOf(pp

				.getLMNGA())));

		return Helper.callSAPService(pp, url, pairs);

	}



	// 根据JSON字符串解析成订单实体对象列表

	private LinkedList<ZuoYe> parseFromJson(String jsonData) {

		if (jsonData == null)

			return null;

		if ("".equals(jsonData))

			return null;

		Type listType = new TypeToken<LinkedList<ZuoYe>>() {

		}.getType();

		Gson gson = new Gson();

		LinkedList<ZuoYe> entitys = gson.fromJson(jsonData, listType);

		return entitys;

	}



	private Boolean setDefaultValue() {

		if (zuoyes == null)

			return false;

		if (zuoyes.isEmpty())

			return false;



		ZuoYe zuoye = zuoyes.getFirst();

		vgw01.setText(String.valueOf(zuoye.getVGW01()));

		vgw02.setText(String.valueOf(zuoye.getVGW02()));

		vgw03.setText(String.valueOf(zuoye.getVGW03()));

		vgw04.setText(String.valueOf(zuoye.getVGW04()));

		vgw05.setText(String.valueOf(zuoye.getVGW05()));

		vgw06.setText(String.valueOf(zuoye.getVGW06()));

		vge01.setText(zuoye.getVGE01());

		vge02.setText(zuoye.getVGE02());

		vge03.setText(zuoye.getVGE03());

		vge04.setText(zuoye.getVGE04());

		vge05.setText(zuoye.getVGE05());

		vge06.setText(zuoye.getVGE06());



		return true;

	}



	// 跳转到下一个Activity

	private void dispatch(PassParameter pp) {

		pp.setISM01(Float.parseFloat(vgw01.getText().toString()));

		pp.setISM02(Float.parseFloat(vgw02.getText().toString()));

		pp.setISM03(Float.parseFloat(vgw03.getText().toString()));

		pp.setISM04(Float.parseFloat(vgw04.getText().toString()));

		pp.setISM05(Float.parseFloat(vgw05.getText().toString()));

		pp.setISM06(Float.parseFloat(vgw06.getText().toString()));

		pp.setILE01(vge01.getText().toString());

		pp.setILE02(vge02.getText().toString());

		pp.setILE03(vge03.getText().toString());

		pp.setILE04(vge04.getText().toString());

		pp.setILE05(vge05.getText().toString());

		pp.setILE06(vge06.getText().toString());



		Intent intent = new Intent(this, DateTimeActivity.class);

		Bundle bundle = new Bundle();

		bundle.putSerializable(PassParameter.PP_KEY, pp);

		intent.putExtras(bundle);



		startActivity(intent);

	}



}

记账日期和时间界面:DateTimeActivity.java:

/**

 * 

 */

package com.fungchoi.sap;



import java.util.Calendar;

import java.util.Locale;



import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;



import android.app.Activity;

import android.app.DatePickerDialog;

import android.app.TimePickerDialog;

import android.content.Intent;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnFocusChangeListener;

import android.widget.Button;

import android.widget.DatePicker;

import android.widget.EditText;

import android.widget.TimePicker;



/**

 * @author Administrator

 * 

 */

public class DateTimeActivity extends Activity {

	private Activity activity;



	private PassParameter pp;



	private Button previous;

	private Button next;



	private EditText txtISDD;

	private EditText txtISDZ;

	private EditText txtIEDD;

	private EditText txtIEDZ;

	private EditText txtBUDAT;

	private EditText tempDate;

	private EditText tempTime;



	private int mYear;

	private int mMonth;

	private int mDay;

	private int mHour;

	private int mMinute;



	/**

	 * 

	 */

	public DateTimeActivity() {

		// TODO Auto-generated constructor stub

	}



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		this.setContentView(R.layout.datetime);



		MyApplication.getInstance().addActivity(this);



		activity = this;



		txtISDD = (EditText) this.findViewById(R.id.txtISDD);

		txtISDZ = (EditText) this.findViewById(R.id.txtISDZ);

		txtIEDD = (EditText) this.findViewById(R.id.txtIEDD);

		txtIEDZ = (EditText) this.findViewById(R.id.txtIEDZ);

		txtBUDAT = (EditText) this.findViewById(R.id.txtBUDAT);



		final Calendar c = Calendar.getInstance(Locale.CHINA);

		mYear = c.get(Calendar.YEAR);

		mMonth = c.get(Calendar.MONTH);

		mDay = c.get(Calendar.DAY_OF_MONTH);

		mHour = c.get(Calendar.HOUR_OF_DAY);

		mMinute = c.get(Calendar.MINUTE);



		Helper.updateDate(txtISDD, mYear, mMonth, mDay);

		Helper.updateDate(txtIEDD, mYear, mMonth, mDay);

		txtISDZ.setText("08:30");

		txtIEDZ.setText("17:30");

		Helper.updateDate(txtBUDAT, mYear, mMonth, mDay);



		// 日期控件注册

		registerEvents1();

		// 时间控件注册

		registerEvents2();



		// 按下返回键返回到上一个界面

		previous = (Button) this.findViewById(R.id.btnPrevious04);

		previous.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				Helper.simulateKey(KeyEvent.KEYCODE_BACK);

			}

		});

		// 按下一步跳转到工序选择界面

		next = (Button) this.findViewById(R.id.btnNext04);

		next.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				dispatch(pp);

			}

		});



		// 从意图里面接收上一个Activity传过来的数据

		Intent intent = this.getIntent();

		pp = (PassParameter) intent.getSerializableExtra(PassParameter.PP_KEY);



	}



	// 跳转到下一个Activity

	private void dispatch(PassParameter pp) {

		pp.setISDD(txtISDD.getText().toString().replaceAll("-", ""));

		pp.setIEDD(txtIEDD.getText().toString().replaceAll("-", ""));

		pp.setISDZ(txtISDZ.getText().toString().replaceAll(":", "") + "00");

		pp.setIEDZ(txtIEDZ.getText().toString().replaceAll(":", "") + "00");

		pp.setBUDAT(txtBUDAT.getText().toString().replaceAll("-", ""));

		Intent intent = new Intent(this, EquipmentActivity.class);

		Bundle bundle = new Bundle();

		bundle.putSerializable(PassParameter.PP_KEY, pp);

		intent.putExtras(bundle);



		startActivity(intent);

	}



	// 日期控件注册事件

	private void registerEvents1() {

		txtISDD.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				Helper.hideIM(activity, v);

				tempDate = txtISDD;

				showDialog1();

			}

		});

		txtIEDD.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				Helper.hideIM(activity, v);

				tempDate = txtIEDD;

				showDialog1();

			}

		});

		txtISDD.setOnFocusChangeListener(new OnFocusChangeListener() {

			public void onFocusChange(View v, boolean hasFocus) {

				if (hasFocus == true) {

					Helper.hideIM(activity, v);

					tempDate = txtISDD;

					showDialog1();

				}

			}

		});

		txtIEDD.setOnFocusChangeListener(new OnFocusChangeListener() {

			public void onFocusChange(View v, boolean hasFocus) {

				if (hasFocus == true) {

					Helper.hideIM(activity, v);

					tempDate = txtIEDD;

					showDialog1();

				}

			}

		});

		txtBUDAT.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				Helper.hideIM(activity, v);

				tempDate = txtBUDAT;

				showDialog1();

			}

		});

	}



	// 时间控件注册事件

	private void registerEvents2() {

		txtISDZ.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				tempTime = txtISDZ;

				showDialog2();

			}

		});

		txtIEDZ.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				tempTime = txtIEDZ;

				showDialog2();

			}

		});

		txtISDZ.setOnFocusChangeListener(new OnFocusChangeListener() {

			public void onFocusChange(View v, boolean hasFocus) {

				if (hasFocus == true) {

					Helper.hideIM(activity, v);

					tempTime = txtISDZ;

					showDialog2();

				}

			}

		});

		txtIEDZ.setOnFocusChangeListener(new OnFocusChangeListener() {

			public void onFocusChange(View v, boolean hasFocus) {

				if (hasFocus == true) {

					Helper.hideIM(activity, v);

					tempTime = txtIEDZ;

					showDialog2();

				}

			}

		});

	}



	// 显示日期控件

	private void showDialog1() {

		DatePickerDialog dialog = new DatePickerDialog(this, mDateSetListener,

				mYear, mMonth, mDay);



		dialog.show();

	}



	// 显示时间控件

	private void showDialog2() {

		TimePickerDialog dialog = new TimePickerDialog(this, mTimeSetListener,

				mHour, mMinute, true);



		dialog.show();

	}



	// 日期控件事件

	private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

		public void onDateSet(DatePicker view, int year, int monthOfYear,

				int dayOfMonth) {

			mYear = year;

			mMonth = monthOfYear;

			mDay = dayOfMonth;



			Helper.updateDate(tempDate, mYear, mMonth, mDay);

		}

	};



	// 时间控件事件

	private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {

		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

			mHour = hourOfDay;

			mMinute = minute;



			Helper.updateTime(tempTime, mHour, mMinute);

		}

	};



}

设备列表选择界面:EquipmentActivity.java:

/**

 * 

 */

package com.fungchoi.sap;



import java.lang.Thread.State;

import java.lang.reflect.Type;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;



import org.apache.http.message.BasicNameValuePair;



import com.fungchoi.sap.entity.Machine;

import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;



import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.KeyEvent;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.HorizontalScrollView;

import android.widget.RadioButton;

import android.widget.ScrollView;

import android.widget.TableLayout;

import android.widget.TableRow;

import android.widget.TextView;



/**

 * @author Administrator

 * 

 */

public class EquipmentActivity extends Activity {



	private final int FP = ViewGroup.LayoutParams.FILL_PARENT;

	private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;



	private Activity activity;



	private ScrollView sv;

	private HorizontalScrollView hsv;

	private TableLayout tab;



	private PassParameter pp;

	private LinkedList<Machine> machines;



	private ProgressDialog pd1;

	private ProgressDialog pd2;

	private Button previous;

	private Button finish;



	/**

	 * 

	 */

	public EquipmentActivity() {

		// TODO Auto-generated constructor stub

	}



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		this.setContentView(R.layout.equipment);



		// 当前活动

		activity = this;



		// 将当前活动压入活动堆栈

		MyApplication.getInstance().addActivity(this);



		// 获取界面控件对象

		sv = (ScrollView) this.findViewById(R.id.scrollView3);

		sv.setHorizontalScrollBarEnabled(true);

		hsv = (HorizontalScrollView) this

				.findViewById(R.id.horizontalScrollView3);

		tab = (TableLayout) hsv.getChildAt(0);



		// 按下返回键返回到上一个界面

		previous = (Button) this.findViewById(R.id.btnPrevious05);

		previous.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				Helper.simulateKey(KeyEvent.KEYCODE_BACK);

			}

		});



		// 按完成按钮提交报工数据到SAP服务完成报工处理

		finish = (Button) this.findViewById(R.id.btnFinish);

		finish.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				// 正式报工之前判断是否选择了机台或者手工组

				if (!Helper.checkRadioButton(tab)) {

					Helper.message(activity, "请选择一台设备或一个手工组!");

					return;

				}

				// 提交处理-报工

				process();

			}

		});



		// 从意图里面接收上一个Activity传过来的数据

		Intent intent = this.getIntent();

		pp = (PassParameter) intent.getSerializableExtra(PassParameter.PP_KEY);



		// 设置正在处理窗口

		pd1 = ProgressDialog.show(this, "提示", "正在处理,请稍候...");

		// 启动线程

		if (thread1.getState() == State.NEW) {

			thread1.start();

		} else {

			thread1.run();

		}

	}



	// 工作线程1

	private Thread thread1 = new Thread() {

		@Override

		public void run() {

			// 从SAP系统获取数据

			String result = getJSONString(pp);

			machines = parseFromJson(result);



			Message message = handler1.obtainMessage();

			Bundle b = new Bundle();

			b.putString("flag", "ok");

			message.setData(b);

			handler1.sendMessage(message);

		}

	};



	// 更新UI

	private Handler handler1 = new Handler() {

		public void handleMessage(Message msg) {

			Helper.enableButton(finish);

			if ("ok".equals(msg.getData().getString("flag"))) {

				// 动态添加数据记录

				addRows();

				pd1.dismiss();

				thread1.stop();

			}

		}

	};



	// 从SAP服务器获取内容(JSON字符串)

	private String getJSONString(PassParameter pp) {

		String url = Helper.getUrl("service0004");

		List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();

		pairs.add(new BasicNameValuePair("OrderCode", pp.getAUFNR()));

		return Helper.callSAPService(pp, url, pairs);

	}



	// 根据JSON字符串解析成订单实体对象列表

	private LinkedList<Machine> parseFromJson(String jsonData) {

		if (jsonData == null)

			return null;

		if ("".equals(jsonData))

			return null;

		Type listType = new TypeToken<LinkedList<Machine>>() {

		}.getType();

		Gson gson = new Gson();

		LinkedList<Machine> entitys = gson.fromJson(jsonData, listType);

		return entitys;

	}



	// 根据读取的记录动态添加列表行

	private Boolean addRows() {

		if (machines == null) {

			Helper.disenableButton(finish);

			return false;

		}

		if (machines.isEmpty()) {

			Helper.disenableButton(finish);

			return false;

		}



		TableRow row;

		TextView view;

		RadioButton radio;



		for (Machine machine : machines) {

			row = new TableRow(this);



			radio = new RadioButton(this);

			radio.setOnClickListener(new View.OnClickListener() {

				public void onClick(View v) {

					changedRadio((RadioButton) v);

				}

			});

			row.addView(radio);



			view = new TextView(this);

			view.setText(machine.getZZSB());

			row.addView(view);



			view = new TextView(this);

			view.setText(machine.getZZSBMS());

			row.addView(view);



			tab.addView(row, new TableLayout.LayoutParams(FP, WC));

		}

		return true;

	}



	// 当更改单选按钮时,获它所在行的订单编号及将其他的单选按钮置为未选中状态

	private void changedRadio(RadioButton rb) {

		int count = tab.getChildCount();

		TableRow row;

		RadioButton radio;

		for (int i = 1; i < count; i++) {

			row = (TableRow) tab.getChildAt(i);

			radio = (RadioButton) row.getChildAt(0);

			if (rb.equals(radio)) {

				pp.setZZSB(((TextView) row.getChildAt(1)).getText().toString());

			} else {

				if (radio.isChecked()) {

					radio.setChecked(false);

				}

			}

		}

	}



	// 执行报工

	private void process() {

		// 设置正在处理窗口

		pd2 = ProgressDialog.show(this, "提示", "正在处理,请稍候...");

		// 启动线程

		if (thread2.getState() == State.NEW) {

			thread2.start();

		} else {

			thread2.run();

		}

	}



	// 提交处理,执行报工

	private String submit(PassParameter pp) {

		String url = Helper.getUrl("service0005");

		List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();

		pairs.add(new BasicNameValuePair("AUFNR", pp.getAUFNR()));

		pairs.add(new BasicNameValuePair("VORNR", pp.getVORNR()));

		pairs.add(new BasicNameValuePair("LMNGA", String.valueOf(pp.getLMNGA())));

		pairs.add(new BasicNameValuePair("MEINH", pp.getMEINH()));

		pairs.add(new BasicNameValuePair("ISM01", String.valueOf(pp.getISM01())));

		pairs.add(new BasicNameValuePair("ILE01", pp.getILE01()));

		pairs.add(new BasicNameValuePair("ISM02", String.valueOf(pp.getISM02())));

		pairs.add(new BasicNameValuePair("ILE02", pp.getILE02()));

		pairs.add(new BasicNameValuePair("ISM03", String.valueOf(pp.getISM03())));

		pairs.add(new BasicNameValuePair("ILE03", pp.getILE03()));

		pairs.add(new BasicNameValuePair("ISM04", String.valueOf(pp.getISM04())));

		pairs.add(new BasicNameValuePair("ILE04", pp.getILE04()));

		pairs.add(new BasicNameValuePair("ISM05", String.valueOf(pp.getISM05())));

		pairs.add(new BasicNameValuePair("ILE05", pp.getILE05()));

		pairs.add(new BasicNameValuePair("ISM06", String.valueOf(pp.getISM06())));

		pairs.add(new BasicNameValuePair("ILE06", pp.getILE06()));

		pairs.add(new BasicNameValuePair("ISDD", pp.getISDD()));

		pairs.add(new BasicNameValuePair("ISDZ", pp.getISDZ()));

		pairs.add(new BasicNameValuePair("IEDD", pp.getIEDD()));

		pairs.add(new BasicNameValuePair("IEDZ", pp.getIEDZ()));

		pairs.add(new BasicNameValuePair("BUDAT", pp.getBUDAT()));

		pairs.add(new BasicNameValuePair("LTXA1", pp.getLTXA1()));

		pairs.add(new BasicNameValuePair("ZZSB", pp.getZZSB()));

		return Helper.callSAPService(pp, url, pairs);

	}



	// 工作线程1

	private Thread thread2 = new Thread() {

		@Override

		public void run() {

			// 提交数据到SAP系统进行处理-执行报工,返回报工结果

			String result = submit(pp);

			pp.setResult(result);



			Message message = handler2.obtainMessage();

			handler2.sendMessage(message);

		}

	};



	// 更新UI

	private Handler handler2 = new Handler() {

		public void handleMessage(Message msg) {

			pd2.dismiss();

			thread2.stop();

			// 跳转到结果界面

			dispatch(pp);

		}

	};



	// 跳转到下一个Activity

	private void dispatch(PassParameter pp) {

		Intent intent = new Intent(this, ResultActivity.class);

		Bundle bundle = new Bundle();

		bundle.putSerializable(PassParameter.PP_KEY, pp);

		intent.putExtras(bundle);



		startActivity(intent);

	}



}

访问SAP报工处理结果界面: ResultActivity.java :

/**

 * 处理结果

 */

package com.fungchoi.sap;



import com.fungchoi.sap.entity.PassParameter;

import com.fungchoi.sap.util.Helper;

import com.fungchoi.sap.util.MyApplication;



import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;



/**

 * @author Administrator

 * 

 */

public class ResultActivity extends Activity {



	/**

	 * 

	 */

	public ResultActivity() {

		// TODO Auto-generated constructor stub

	}



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		this.setContentView(R.layout.result);



		MyApplication.getInstance().addActivity(this);



		// 从意图里面接收上一个Activity传过来的数据

		Intent intent = this.getIntent();

		PassParameter pp = (PassParameter) intent

				.getSerializableExtra(PassParameter.PP_KEY);



		TextView view = (TextView) this.findViewById(R.id.txtContent);

		view.setText(pp.getResult());



		// 按下返回键返回到上一个界面

		Button previous = (Button) this.findViewById(R.id.btnPrevious06);

		previous.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				Helper.simulateKey(KeyEvent.KEYCODE_BACK);

			}

		});



		// 退出系统

		Button exit = (Button) this.findViewById(R.id.btnExit);

		exit.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {

				MyApplication.getInstance().exit();

			}

		});

	}



}

 

com.fungchoi.sap.entity包包含6个实体对象文件:

用户对象:User.java

/**

 * 

 */

package com.fungchoi.sap.entity;



/**

 * @author Administrator

 *

 */

public class User {



	/**

	 * 

	 */

	public User() {

		// TODO Auto-generated constructor stub

	}

	

	private String userName;

	private String password;

	

	/**

	 * @return the userName

	 */

	public String getUserName() {

		return userName;

	}

	/**

	 * @param userName the userName to set

	 */

	public void setUserName(String userName) {

		this.userName = userName;

	}



	/**

	 * @return the password

	 */

	public String getPassword() {

		return password;

	}



	/**

	 * @param password the password to set

	 */

	public void setPassword(String password) {

		this.password = password;

	}	



}

  

生产订单对象:Order.java

/**

 * 

 */

package com.fungchoi.sap.entity;



/**

 * @author Administrator

 *

 */

public class Order {

	private String AUFNR;//	1 Types	AUFNR	CHAR	12	0	订单号 

	private String MAKTX;//1 Types	MAKTX	CHAR	40	0	物料描述(短文本) 

	private int GAMNG;//1 Types	GAMNG	QUAN	13	3	订单数量总计

	private int IGMNG;//1 Types	CO_IGMNG	QUAN	13	3	确认订单中的产量确认

	private String MEINS;//1 Types	MEINS	UNIT	3	0	基本计量单位

	private String MSEHT;//1 Types	MSEHT	CHAR	10	0	度量单位文本(最多10个字符)

	/**

	 * @return the aUFNR

	 */

	public String getAUFNR() {

		return AUFNR;

	}

	/**

	 * @param aUFNR the aUFNR to set

	 */

	public void setAUFNR(String aUFNR) {

		AUFNR = aUFNR;

	}

	/**

	 * @return the mAKTX

	 */

	public String getMAKTX() {

		return MAKTX;

	}

	/**

	 * @param mAKTX the mAKTX to set

	 */

	public void setMAKTX(String mAKTX) {

		MAKTX = mAKTX;

	}

	/**

	 * @return the gAMNG

	 */

	public int getGAMNG() {

		return GAMNG;

	}

	/**

	 * @param gAMNG the gAMNG to set

	 */

	public void setGAMNG(int gAMNG) {

		GAMNG = gAMNG;

	}

	/**

	 * @return the iGMNG

	 */

	public int getIGMNG() {

		return IGMNG;

	}

	/**

	 * @param iGMNG the iGMNG to set

	 */

	public void setIGMNG(int iGMNG) {

		IGMNG = iGMNG;

	}

	/**

	 * @return the mEINS

	 */

	public String getMEINS() {

		return MEINS;

	}

	/**

	 * @param mEINS the mEINS to set

	 */

	public void setMEINS(String mEINS) {

		MEINS = mEINS;

	}

	/**

	 * @return the mSEHT

	 */

	public String getMSEHT() {

		return MSEHT;

	}

	/**

	 * @param mSEHT the mSEHT to set

	 */

	public void setMSEHT(String mSEHT) {

		MSEHT = mSEHT;

	}



}

  

工序实体对象:Step.java

/**

 * 

 */

package com.fungchoi.sap.entity;



/**

 * @author Administrator

 *

 */

public class Step {



	/**

	 * 

	 */

	public Step() {

		// TODO Auto-generated constructor stub

	}

	

	private String VORNR;//	1 Types	VORNR	CHAR	4	0	操作/活动编号

	private String STEUS;//	1 Types	STEUS	CHAR	4	0	控制码 

	private String LTXA1;//	1 Types	LTXA1	CHAR	40	0	工序短文本 

	private float MGVRG;//	1 Types	MGVRG	QUAN	13	3	工序数量

	private String MEINH;//	1 Types	VORME	UNIT	3	0	作业/工序的计量单位 

	private String MSEHT;//	1 Types	MSEHT	CHAR	10	0	度量单位文本(最多10个字符)

	private String RUECK;//确认号

	/**

	 * @return the vORNR

	 */

	public String getVORNR() {

		return VORNR;

	}

	/**

	 * @param vORNR the vORNR to set

	 */

	public void setVORNR(String vORNR) {

		VORNR = vORNR;

	}

	/**

	 * @return the sTEUS

	 */

	public String getSTEUS() {

		return STEUS;

	}

	/**

	 * @param sTEUS the sTEUS to set

	 */

	public void setSTEUS(String sTEUS) {

		STEUS = sTEUS;

	}

	/**

	 * @return the lTXA1

	 */

	public String getLTXA1() {

		return LTXA1;

	}

	/**

	 * @param lTXA1 the lTXA1 to set

	 */

	public void setLTXA1(String lTXA1) {

		LTXA1 = lTXA1;

	}

	/**

	 * @return the mGVRG

	 */

	public float getMGVRG() {

		return MGVRG;

	}

	/**

	 * @param mGVRG the mGVRG to set

	 */

	public void setMGVRG(float mGVRG) {

		MGVRG = mGVRG;

	}

	/**

	 * @return the mEINH

	 */

	public String getMEINH() {

		return MEINH;

	}

	/**

	 * @param mEINH the mEINH to set

	 */

	public void setMEINH(String mEINH) {

		MEINH = mEINH;

	}

	/**

	 * @return the mSEHT

	 */

	public String getMSEHT() {

		return MSEHT;

	}

	/**

	 * @param mSEHT the mSEHT to set

	 */

	public void setMSEHT(String mSEHT) {

		MSEHT = mSEHT;

	}

	/**

	 * @return the rUECK

	 */

	public String getRUECK() {

		return RUECK;

	}

	/**

	 * @param rUECK the rUECK to set

	 */

	public void setRUECK(String rUECK) {

		RUECK = rUECK;

	}

	

	



}

  

作业实体对象:ZuoYe.java

package com.fungchoi.sap.entity;



public class ZuoYe {



	public ZuoYe() {

		// TODO Auto-generated constructor stub

	}

    

	private float VGW01;//	1 Types	VGWRT	QUAN	9	3	标准值 

	private float VGW02;//	1 Types	VGWRT	QUAN	9	3	标准值 

	private float VGW03;//	1 Types	VGWRT	QUAN	9	3	标准值 

	private float VGW04;//	1 Types	VGWRT	QUAN	9	3	标准值 

	private float VGW05;//	1 Types	VGWRT	QUAN	9	3	标准值 

	private float VGW06;//	1 Types	VGWRT	QUAN	9	3	标准值 

	private String VGE01;//	1 Types	VGWRTEH	UNIT	3	0	标准值计量单位 

	private String VGE02;//	1 Types	VGWRTEH	UNIT	3	0	标准值计量单位 

	private String VGE03;//	1 Types	VGWRTEH	UNIT	3	0	标准值计量单位 

	private String VGE04;//	1 Types	VGWRTEH	UNIT	3	0	标准值计量单位 

	private String VGE05;//	1 Types	VGWRTEH	UNIT	3	0	标准值计量单位 

	private String VGE06;//	1 Types	VGWRTEH	UNIT	3	0	标准值计量单位 

	/**

	 * @return the vGW01

	 */

	public float getVGW01() {

		return VGW01;

	}

	/**

	 * @param vGW01 the vGW01 to set

	 */

	public void setVGW01(float vGW01) {

		VGW01 = vGW01;

	}

	/**

	 * @return the vGW02

	 */

	public float getVGW02() {

		return VGW02;

	}

	/**

	 * @param vGW02 the vGW02 to set

	 */

	public void setVGW02(float vGW02) {

		VGW02 = vGW02;

	}

	/**

	 * @return the vGW03

	 */

	public float getVGW03() {

		return VGW03;

	}

	/**

	 * @param vGW03 the vGW03 to set

	 */

	public void setVGW03(float vGW03) {

		VGW03 = vGW03;

	}

	/**

	 * @return the vGW04

	 */

	public float getVGW04() {

		return VGW04;

	}

	/**

	 * @param vGW04 the vGW04 to set

	 */

	public void setVGW04(float vGW04) {

		VGW04 = vGW04;

	}

	/**

	 * @return the vGW05

	 */

	public float getVGW05() {

		return VGW05;

	}

	/**

	 * @param vGW05 the vGW05 to set

	 */

	public void setVGW05(float vGW05) {

		VGW05 = vGW05;

	}

	/**

	 * @return the vGW06

	 */

	public float getVGW06() {

		return VGW06;

	}

	/**

	 * @param vGW06 the vGW06 to set

	 */

	public void setVGW06(float vGW06) {

		VGW06 = vGW06;

	}

	/**

	 * @return the vGE01

	 */

	public String getVGE01() {

		return VGE01;

	}

	/**

	 * @param vGE01 the vGE01 to set

	 */

	public void setVGE01(String vGE01) {

		VGE01 = vGE01;

	}

	/**

	 * @return the vGE02

	 */

	public String getVGE02() {

		return VGE02;

	}

	/**

	 * @param vGE02 the vGE02 to set

	 */

	public void setVGE02(String vGE02) {

		VGE02 = vGE02;

	}

	/**

	 * @return the vGE03

	 */

	public String getVGE03() {

		return VGE03;

	}

	/**

	 * @param vGE03 the vGE03 to set

	 */

	public void setVGE03(String vGE03) {

		VGE03 = vGE03;

	}

	/**

	 * @return the vGE04

	 */

	public String getVGE04() {

		return VGE04;

	}

	/**

	 * @param vGE04 the vGE04 to set

	 */

	public void setVGE04(String vGE04) {

		VGE04 = vGE04;

	}

	/**

	 * @return the vGE05

	 */

	public String getVGE05() {

		return VGE05;

	}

	/**

	 * @param vGE05 the vGE05 to set

	 */

	public void setVGE05(String vGE05) {

		VGE05 = vGE05;

	}

	/**

	 * @return the vGE06

	 */

	public String getVGE06() {

		return VGE06;

	}

	/**

	 * @param vGE06 the vGE06 to set

	 */

	public void setVGE06(String vGE06) {

		VGE06 = vGE06;

	}

	

	

}

  

设备实体对象:Machine.java

/**

 * 

 */

package com.fungchoi.sap.entity;



/**

 * @author Administrator

 *

 */

public class Machine {



	/**

	 * 

	 */

	public Machine() {

		// TODO Auto-generated constructor stub

	}

	

	private String ZZSB;//	1 Types	ZZSB	CHAR	10	0	设备编号

	private String ZZSBMS;//	1 Types	ZZSBMS	CHAR	20	0	设备描述

	/**

	 * @return the zZSB

	 */

	public String getZZSB() {

		return ZZSB;

	}

	/**

	 * @param zZSB the zZSB to set

	 */

	public void setZZSB(String zZSB) {

		ZZSB = zZSB;

	}

	/**

	 * @return the zZSBMS

	 */

	public String getZZSBMS() {

		return ZZSBMS;

	}

	/**

	 * @param zZSBMS the zZSBMS to set

	 */

	public void setZZSBMS(String zZSBMS) {

		ZZSBMS = zZSBMS;

	}



}

  

传递参数对象:PassParameter.java

package com.fungchoi.sap.entity;



import java.io.Serializable;



public class PassParameter implements Serializable {

	

	/**

	 * 

	 */

	private static final long serialVersionUID = -3185894960099294258L;



	public final static String PP_KEY = "com.fungchoi.sap.pp";

	

	//帐号和密码

	private String userName;//帐号

	private String password;//密码

	

	//查询参数

	private String beginDate;//订单开始日期

	private String endDate;//订单结束日期

	private String orderCode;//订单部分编码或者完整编码

	private String materialDesc;//物料部分描述或者完整描述

	

	//报工参数

	private String AUFNR;//订单

	private String VORNR;//工序

	private float LMNGA;//产量

	private String MEINH;//单位

	private float ISM01;//人工

	private float ISM02;//动力

	private float ISM03;//机器

	private float ISM04;//油墨

	private float ISM05;//通用材料

	private float ISM06;//其他

	private String ILE01;//人工-单位

	private String ILE02;//动力-单位

	private String ILE03;//机器-单位

	private String ILE04;//油墨-单位

	private String ILE05;//通用材料-单位

	private String ILE06;//其他-单位

	private String ISDD;//开始执行日期

	private String IEDD;//结束执行日期

	private String ISDZ;//开始执行时间

	private String IEDZ;//结束执行时间

	private String BUDAT;//记账日期

	private String LTXA1;//确认文本-报工者的手机号码

	private String ZZSB;//设备编码或者手工组

	

	//处理结果

	private String result;//报工返回处理结果

		

	/**

	 * @return the beginDate

	 */

	public String getBeginDate() {

		return beginDate;

	}

	/**

	 * @param beginDate the beginDate to set

	 */

	public void setBeginDate(String beginDate) {

		this.beginDate = beginDate;

	}

	/**

	 * @return the endDate

	 */

	public String getEndDate() {

		return endDate;

	}

	/**

	 * @param endDate the endDate to set

	 */

	public void setEndDate(String endDate) {

		this.endDate = endDate;

	}

	/**

	 * @return the materialDesc

	 */

	public String getMaterialDesc() {

		return materialDesc;

	}

	/**

	 * @param materialDesc the materialDesc to set

	 */

	public void setMaterialDesc(String materialDesc) {

		this.materialDesc = materialDesc;

	}

	/**

	 * @return the aUFNR

	 */

	public String getAUFNR() {

		return AUFNR;

	}

	/**

	 * @param aUFNR the aUFNR to set

	 */

	public void setAUFNR(String aUFNR) {

		AUFNR = aUFNR;

	}

	/**

	 * @return the vORNR

	 */

	public String getVORNR() {

		return VORNR;

	}

	/**

	 * @param vORNR the vORNR to set

	 */

	public void setVORNR(String vORNR) {

		VORNR = vORNR;

	}

	/**

	 * @return the lMNGA

	 */

	public float getLMNGA() {

		return LMNGA;

	}

	/**

	 * @param lMNGA the lMNGA to set

	 */

	public void setLMNGA(float lMNGA) {

		LMNGA = lMNGA;

	}

	/**

	 * @return the iSM01

	 */

	public float getISM01() {

		return ISM01;

	}

	/**

	 * @param iSM01 the iSM01 to set

	 */

	public void setISM01(float iSM01) {

		ISM01 = iSM01;

	}

	/**

	 * @return the iSM02

	 */

	public float getISM02() {

		return ISM02;

	}

	/**

	 * @param iSM02 the iSM02 to set

	 */

	public void setISM02(float iSM02) {

		ISM02 = iSM02;

	}

	/**

	 * @return the iSM03

	 */

	public float getISM03() {

		return ISM03;

	}

	/**

	 * @param iSM03 the iSM03 to set

	 */

	public void setISM03(float iSM03) {

		ISM03 = iSM03;

	}

	/**

	 * @return the iSM04

	 */

	public float getISM04() {

		return ISM04;

	}

	/**

	 * @param iSM04 the iSM04 to set

	 */

	public void setISM04(float iSM04) {

		ISM04 = iSM04;

	}

	/**

	 * @return the iSM05

	 */

	public float getISM05() {

		return ISM05;

	}

	/**

	 * @param iSM05 the iSM05 to set

	 */

	public void setISM05(float iSM05) {

		ISM05 = iSM05;

	}

	/**

	 * @return the iSM06

	 */

	public float getISM06() {

		return ISM06;

	}

	/**

	 * @param iSM06 the iSM06 to set

	 */

	public void setISM06(float iSM06) {

		ISM06 = iSM06;

	}

	/**

	 * @return the iLE01

	 */

	public String getILE01() {

		return ILE01;

	}

	/**

	 * @param iLE01 the iLE01 to set

	 */

	public void setILE01(String iLE01) {

		ILE01 = iLE01;

	}

	/**

	 * @return the iLE02

	 */

	public String getILE02() {

		return ILE02;

	}

	/**

	 * @param iLE02 the iLE02 to set

	 */

	public void setILE02(String iLE02) {

		ILE02 = iLE02;

	}

	/**

	 * @return the iLE03

	 */

	public String getILE03() {

		return ILE03;

	}

	/**

	 * @param iLE03 the iLE03 to set

	 */

	public void setILE03(String iLE03) {

		ILE03 = iLE03;

	}

	/**

	 * @return the iLE04

	 */

	public String getILE04() {

		return ILE04;

	}

	/**

	 * @param iLE04 the iLE04 to set

	 */

	public void setILE04(String iLE04) {

		ILE04 = iLE04;

	}

	/**

	 * @return the iLE05

	 */

	public String getILE05() {

		return ILE05;

	}

	/**

	 * @param iLE05 the iLE05 to set

	 */

	public void setILE05(String iLE05) {

		ILE05 = iLE05;

	}

	/**

	 * @return the iLE06

	 */

	public String getILE06() {

		return ILE06;

	}

	/**

	 * @param iLE06 the iLE06 to set

	 */

	public void setILE06(String iLE06) {

		ILE06 = iLE06;

	}

	/**

	 * @return the iSDD

	 */

	public String getISDD() {

		return ISDD;

	}

	/**

	 * @param iSDD the iSDD to set

	 */

	public void setISDD(String iSDD) {

		ISDD = iSDD;

	}

	/**

	 * @return the iEDD

	 */

	public String getIEDD() {

		return IEDD;

	}

	/**

	 * @param iEDD the iEDD to set

	 */

	public void setIEDD(String iEDD) {

		IEDD = iEDD;

	}

	/**

	 * @return the iSDZ

	 */

	public String getISDZ() {

		return ISDZ;

	}

	/**

	 * @param iSDZ the iSDZ to set

	 */

	public void setISDZ(String iSDZ) {

		ISDZ = iSDZ;

	}

	/**

	 * @return the iEDZ

	 */

	public String getIEDZ() {

		return IEDZ;

	}

	/**

	 * @param iEDZ the iEDZ to set

	 */

	public void setIEDZ(String iEDZ) {

		IEDZ = iEDZ;

	}

	/**

	 * @return the zZSB

	 */

	public String getZZSB() {

		return ZZSB;

	}

	/**

	 * @param zZSB the zZSB to set

	 */

	public void setZZSB(String zZSB) {

		ZZSB = zZSB;

	}

	/**

	 * @return the orderCode

	 */

	public String getOrderCode() {

		return orderCode;

	}

	/**

	 * @param orderCode the orderCode to set

	 */

	public void setOrderCode(String orderCode) {

		this.orderCode = orderCode;

	}

	/**

	 * @return the mEINH

	 */

	public String getMEINH() {

		return MEINH;

	}

	/**

	 * @param mEINH the mEINH to set

	 */

	public void setMEINH(String mEINH) {

		MEINH = mEINH;

	}

	/**

	 * @return the lTXA1

	 */

	public String getLTXA1() {

		return LTXA1;

	}

	/**

	 * @param lTXA1 the lTXA1 to set

	 */

	public void setLTXA1(String lTXA1) {

		LTXA1 = lTXA1;

	}

	/**

	 * @return the result

	 */

	public String getResult() {

		return result;

	}

	/**

	 * @param result the result to set

	 */

	public void setResult(String result) {

		this.result = result;

	}

	/**

	 * @return the bUDAT

	 */

	public String getBUDAT() {

		return BUDAT;

	}

	/**

	 * @param bUDAT the bUDAT to set

	 */

	public void setBUDAT(String bUDAT) {

		BUDAT = bUDAT;

	}

	/**

	 * @return the userName

	 */

	public String getUserName() {

		return userName;

	}

	/**

	 * @param userName the userName to set

	 */

	public void setUserName(String userName) {

		this.userName = userName;

	}

	/**

	 * @return the password

	 */

	public String getPassword() {

		return password;

	}

	/**

	 * @param password the password to set

	 */

	public void setPassword(String password) {

		this.password = password;

	}

	

	

}

com.fungchoi.sap.util工具包有两个程序文件:

Helper类:

/**

 * 帮助类

 */

package com.fungchoi.sap.util;



import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.lang.reflect.Type;

import java.util.LinkedList;

import java.util.List;



import org.apache.http.HttpHost;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.ResponseHandler;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.BasicResponseHandler;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.protocol.HTTP;



import com.fungchoi.sap.R;

import com.fungchoi.sap.entity.PassParameter;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;



import android.app.Activity;

import android.app.AlertDialog;

import android.app.Instrumentation;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

import android.os.IBinder;

import android.telephony.TelephonyManager;

import android.util.Log;

import android.view.View;

import android.view.Window;

import android.view.inputmethod.InputMethodManager;

import android.widget.Button;

import android.widget.EditText;

import android.widget.RadioButton;

import android.widget.TableLayout;

import android.widget.TableRow;



/**

 * @author Administrator

 * 

 */

public final class Helper {

	private final static String host = "10.10.100.239";

	private final static int port = 8000;

	private final static String client = "500";



	// private final static String userName = "test01";

	// private final static String password = "4480340";



	/**

	 * 

	 */

	public Helper() {

	}



	// 调用系统按键-返回键

	public static void simulateKey(final int KeyCode) {

		new Thread() {

			public void run() {

				try {

					Instrumentation inst = new Instrumentation();

					inst.sendKeyDownUpSync(KeyCode);

				} catch (Exception e) {

					Log.e("Exception when sendKeyDownUpSync", e.toString());

				}

			}

		}.start();

	}



	// 更新日期

	public static void updateDate(EditText et, int mYear, int mMonth, int mDay) {

		et.setText(new StringBuilder().append(mYear).append("-")

				.append((mMonth + 1) < 10 ? "0" + (mMonth + 1) : (mMonth + 1))

				.append("-").append((mDay < 10) ? "0" + mDay : mDay));

	}



	// 更新时间

	public static void updateTime(EditText et, int mHour, int mMinute) {

		et.setText(new StringBuilder()

				.append((mHour < 10) ? "0" + mHour : mHour).append(":")

				.append((mMinute < 10) ? "0" + mMinute : mMinute));



	}



	// 隐藏手机键盘

	public static void hideIM(Activity activity, View edt) {

		try {

			InputMethodManager im = (InputMethodManager) activity

					.getSystemService(Activity.INPUT_METHOD_SERVICE);

			IBinder windowToken = edt.getWindowToken();



			if (windowToken != null) {

				im.hideSoftInputFromWindow(windowToken, 0);

			}

		} catch (Exception e) {



		}

	}



	// 根据JSON字符串解析成实体对象列表

	public static <T> LinkedList<T> parseOrderFromJson(String jsonData) {

		if (jsonData == null)

			return null;

		if ("".equals(jsonData))

			return null;

		Type listType = new TypeToken<LinkedList<T>>() {

		}.getType();

		Gson gson = new Gson();

		LinkedList<T> entitys = gson.fromJson(jsonData, listType);

		return entitys;

	}



	// 获取URL

	public static String getUrl(String service) {

		StringBuilder sb = new StringBuilder();

		sb.append("/sap/bc/icf/").append(service).append("?sap-client=")

				.append(Helper.client);

		return sb.toString();

	}



	// 访问SAP服务

	public static String callSAPService(PassParameter pp, String url,

			List<BasicNameValuePair> pairs) {

		String result = "";

		HttpHost targetHost = new HttpHost(Helper.host, Helper.port, "http");

		DefaultHttpClient httpclient = new DefaultHttpClient();

		httpclient.getCredentialsProvider().setCredentials(

				new AuthScope(targetHost.getHostName(), targetHost.getPort()),

				new UsernamePasswordCredentials(pp.getUserName(), pp

						.getPassword()));



		// // Create AuthCache instance

		// AuthCache authCache = new BasicAuthCache();

		// // Generate BASIC scheme object and add it to the local auth cache

		// BasicScheme basicAuth = new BasicScheme();

		// authCache.put(targetHost, basicAuth);

		//

		// // Add AuthCache to the execution context

		// BasicHttpContext localcontext = new BasicHttpContext();

		// localcontext.setAttribute(ClientContext.AUTH_SCHEME_PREF, authCache);



		HttpPost request = new HttpPost(url);

		try {

			request.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8));

		} catch (UnsupportedEncodingException e) {

			result = null;// "UnsupportedEncodingException.";

		}

		ResponseHandler<String> handler = new BasicResponseHandler();

		try {

			result = httpclient.execute(targetHost, request, handler);

		} catch (ClientProtocolException e) {

			result = null;// "ClientException.";

		} catch (IOException e) {

			result = null;// "IOException.";

		} catch (Exception e) {

			result = null;

		}



		httpclient.getConnectionManager().shutdown();

		return result;

	}



	// 禁用按钮

	public static void disenableButton(Button button) {

		if (button == null) {

			return;

		}

		if (button.isEnabled()) {

			button.setEnabled(false);

		}

	}



	// 启用按钮

	public static void enableButton(Button button) {

		if (button == null) {

			return;

		}

		if (!button.isEnabled()) {

			button.setEnabled(true);

		}

	}



	// 设置窗口标题图标

	public static void setIcon(Activity act) {

		Window win = act.getWindow();

		win.requestFeature(Window.FEATURE_LEFT_ICON);

		win.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,

				R.drawable.fc24);

	}



	// 判断手机电量,低于10%给予用户一个提示

	private static Activity bat_activity;



	public static void checkBattery(Activity activity) {

		bat_activity = activity;

		bat_activity.registerReceiver(mReceiver, new IntentFilter(

				Intent.ACTION_BATTERY_CHANGED));

	}



	private static BroadcastReceiver mReceiver = new BroadcastReceiver() {

		public void onReceive(Context context, Intent intent) {

			int level = intent.getIntExtra("level", 0);

			// level加%就是当前电量了

			if (level <= 10) {

				new AlertDialog.Builder(bat_activity).setTitle("提醒")

						.setMessage("你的手机电量现在只有" + level + "%\n请及时充电!")

						.setPositiveButton("确定", null).show();

			}

			// 注销对手机电量的监听

			bat_activity.unregisterReceiver(mReceiver);

		}

	};



	// 判断3G网络或者WIFI网络连接

	public static boolean checkNet(Activity activity) {

		ConnectivityManager mConnectivity = (ConnectivityManager) activity

				.getSystemService(Context.CONNECTIVITY_SERVICE);

		TelephonyManager mTelephony = (TelephonyManager) activity

				.getSystemService(Context.TELEPHONY_SERVICE);

		// 检查网络连接,如果无网络可用,就不需要进行连网操作等

		NetworkInfo info = mConnectivity.getActiveNetworkInfo();

		if (info == null || !mConnectivity.getBackgroundDataSetting()) {

			return false;

		}

		// 判断网络连接类型,3G或wifi里是否连接

		int netType = info.getType();

		int netSubtype = info.getSubtype();

		if (netType == ConnectivityManager.TYPE_WIFI) {

			return info.isConnected();

		} else if (netType == ConnectivityManager.TYPE_MOBILE

				&& netSubtype == TelephonyManager.NETWORK_TYPE_UMTS

				&& !mTelephony.isNetworkRoaming()) {

			return info.isConnected();

		} else {

			return false;

		}

	}



	// 弹出错误信息

	public static void message(Activity activity, String msg) {

		new AlertDialog.Builder(activity).setTitle("错误").setMessage(msg)

				.setPositiveButton("确定", null).show();

	}



	// 获取手机号码,但不一定能获取到,如果SIM卡已经写入了本机号码便能获取

	public static String getPhoneNumber(Activity activity) {

		TelephonyManager tm = (TelephonyManager) activity

				.getSystemService(Context.TELEPHONY_SERVICE);

		return tm.getLine1Number();

	}



	public static boolean checkRadioButton(TableLayout tab) {

		int count = tab.getChildCount();

		boolean flag = false;

		TableRow row;

		RadioButton radio;

		for (int i = 1; i < count; i++) {

			row = (TableRow) tab.getChildAt(i);

			radio = (RadioButton) row.getChildAt(0);

			if (radio.isChecked()) {

				flag = true;

			}

		}

		return flag;

	}



}

MyApplication类:

/**

 * 完美退出系统

 */

package com.fungchoi.sap.util;



import java.util.LinkedList;

import java.util.List;



import android.app.Activity;

import android.app.Application;



/**

 * @author Administrator

 * 

 */

public class MyApplication extends Application {

	private List<Activity> activityList = new LinkedList<Activity>();

	private static MyApplication instance;



	/**

	 * 

	 */

	private MyApplication() {

		// TODO Auto-generated constructor stub

	}



	// 单例模式中获取唯一的MyApplication实例

	public static MyApplication getInstance() {

		if (null == instance) {

			instance = new MyApplication();

		}

		return instance;

	}



	// 添加Activity到容器中

	public void addActivity(Activity activity) {

		activityList.add(activity);

	}



	// 遍历所有Activity并finish

	public void exit() {

		for (Activity activity : activityList) {

			activity.finish();

		}

		System.exit(0);

	}

}

图片资源文件:

布局资源文件:

login.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    

    <TextView 

        android:textStyle="bold"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/strLogin" ></TextView>

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strUserName" ></TextView>

        <EditText

            android:id="@+id/txtUserName"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:inputType="text">

        </EditText>

    </LinearLayout>    

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPassword" ></TextView>

        <EditText

            android:id="@+id/txtPassword"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:inputType="textPassword">

        </EditText>

    </LinearLayout>     

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>



    <Button

        android:id="@+id/btnLogin"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/strLoginText"

        android:layout_gravity="right"

        android:textStyle="bold" ></Button>



</LinearLayout>

main.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >



    <TextView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/strQuery"

        android:textStyle="bold" >

    </TextView>



    <TextView

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white" >

    </TextView>



    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:focusable="true"

        android:focusableInTouchMode="true"

        android:orientation="horizontal" >



        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strBeginDate"

            android:textStyle="bold" >

        </TextView>



        <EditText

            android:id="@+id/txtBeginDate"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:inputType="date" >

        </EditText>

    </LinearLayout>



    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:focusable="true"

        android:focusableInTouchMode="true"

        android:orientation="horizontal" >



        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strEndDate"

            android:textStyle="bold" >

        </TextView>



        <EditText

            android:id="@+id/txtEndDate"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:inputType="date" >

        </EditText>

    </LinearLayout>



    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" >



        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strAufnr"

            android:textStyle="bold" >

        </TextView>



        <EditText

            android:id="@+id/txtOrderCode"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:inputType="number" >

        </EditText>

    </LinearLayout>



    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" >



        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strMatnr"

            android:textStyle="bold" >

        </TextView>



        <EditText

            android:id="@+id/txtMatnr"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:inputType="text" >

        </EditText>

    </LinearLayout>



    <TextView

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white" >

    </TextView>



    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >



        <Button

            android:id="@+id/btnPrevious00"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPrevious"

            android:textStyle="bold" >

        </Button>



        <Button

            android:id="@+id/btnStart"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strStart"

            android:textStyle="bold" >

        </Button>

    </LinearLayout>



</LinearLayout>

orderlist.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >



    <TextView

        android:textStyle="bold"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/strOrderlist" ></TextView>

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <ScrollView

        android:id="@+id/scrollView1"

        android:layout_width="fill_parent"   

        android:layout_height="300dip"  

        android:scrollbars="vertical"  >

        <HorizontalScrollView

            android:id="@+id/horizontalScrollView1"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:fillViewport="true" >

            <TableLayout  

                android:id="@+id/tabOrderList"  

                android:layout_width="wrap_content"  

                android:layout_height="wrap_content"  

                android:stretchColumns="2" >

                <TableRow>

                    <RadioButton 

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:visibility="invisible"></RadioButton>

                    <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strAufnr2" ></TextView>

                

                     <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strMatnr2" ></TextView>

                     

                     <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strQuantity" ></TextView>

                

                     <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strUnit" ></TextView>

                </TableRow>        

            </TableLayout>

        </HorizontalScrollView>

    </ScrollView>

    

    

    <TextView 

        android:id="@+id/line4"

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

        <Button

            android:id="@+id/btnPrevious01"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPrevious"

            android:textStyle="bold" ></Button>

        <Button

            android:id="@+id/btnNext01"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strNext"

            android:textStyle="bold" ></Button>

    </LinearLayout>

        

</LinearLayout>

steplist.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    

    <TextView

        android:textStyle="bold"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/strSteplist" ></TextView>

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <ScrollView

        android:id="@+id/scrollView2"

        android:layout_width="fill_parent"   

        android:layout_height="300dip"  

        android:scrollbars="vertical"  >

        <HorizontalScrollView

            android:id="@+id/horizontalScrollView2"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:fillViewport="true" >

            <TableLayout  

                android:id="@+id/tabStepList"  

                android:layout_width="wrap_content"  

                android:layout_height="wrap_content"  

                android:stretchColumns="2" >

                <TableRow>

                    <RadioButton 

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:visibility="invisible"></RadioButton>

                    <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strVornr" ></TextView>

                

                     <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strItxa1" ></TextView>

                     

                     <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strMgvrg" ></TextView>

                

                     <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strMeinh" ></TextView>

                </TableRow>        

            </TableLayout>

        </HorizontalScrollView>

    </ScrollView>

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

        <Button

            android:id="@+id/btnPrevious02"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPrevious"

            android:textStyle="bold" ></Button>

        <Button

            android:id="@+id/btnNext02"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strNext"

            android:textStyle="bold" ></Button>

    </LinearLayout>



</LinearLayout>

zuoye.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    

    <TextView

        android:textStyle="bold"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/strZuoye" ></TextView>

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strVgw01" ></TextView>

        <EditText

            android:id="@+id/txtVgw01"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="numberDecimal">

        </EditText>

        <EditText

            android:id="@+id/txtVge01"

            android:layout_width="60dip"

            android:layout_height="wrap_content"

            android:inputType="text">

        </EditText>

    </LinearLayout>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strVgw02" ></TextView>

        <EditText

            android:id="@+id/txtVgw02"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="numberDecimal">

        </EditText>

        <EditText

            android:id="@+id/txtVge02"

            android:layout_width="60dip"

            android:layout_height="wrap_content"

            android:inputType="text">

        </EditText>

    </LinearLayout>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strVgw03" ></TextView>

        <EditText

            android:id="@+id/txtVgw03"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="numberDecimal">

        </EditText>

        <EditText

            android:id="@+id/txtVge03"

            android:layout_width="60dip"

            android:layout_height="wrap_content"

            android:inputType="text">

        </EditText>

    </LinearLayout>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strVgw04" ></TextView>

        <EditText

            android:id="@+id/txtVgw04"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="numberDecimal">

        </EditText>

        <EditText

            android:id="@+id/txtVge04"

            android:layout_width="60dip"

            android:layout_height="wrap_content"

            android:inputType="text">

        </EditText>

    </LinearLayout>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strVgw05" ></TextView>

        <EditText

            android:id="@+id/txtVgw05"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="numberDecimal">

        </EditText>

        <EditText

            android:id="@+id/txtVge05"

            android:layout_width="60dip"

            android:layout_height="wrap_content"

            android:inputType="text">

        </EditText>

    </LinearLayout>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView

            android:textStyle="bold"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strVgw06" ></TextView>

        <EditText

            android:id="@+id/txtVgw06"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="numberDecimal">

        </EditText>

        <EditText

            android:id="@+id/txtVge06"

            android:layout_width="60dip"

            android:layout_height="wrap_content"

            android:inputType="text">

        </EditText>

    </LinearLayout>

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

        <Button

            android:id="@+id/btnPrevious03"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPrevious"

            android:textStyle="bold" ></Button>

        <Button

            android:id="@+id/btnNext03"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strNext"

            android:textStyle="bold" ></Button>

    </LinearLayout>



</LinearLayout>

datetime.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    

    <TextView

        android:textStyle="bold"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/strDatetime" ></TextView>

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <EditText

            android:id="@+id/txtISDD"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="date">

        </EditText>

        <EditText

            android:id="@+id/txtISDZ"

            android:layout_width="100dip"

            android:layout_height="wrap_content"

            android:inputType="time">

        </EditText>

    </LinearLayout>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <EditText

            android:id="@+id/txtIEDD"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="date">

        </EditText>

        <EditText

            android:id="@+id/txtIEDZ"

            android:layout_width="100dip"

            android:layout_height="wrap_content"

            android:inputType="time">

        </EditText>

    </LinearLayout>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <EditText

            android:id="@+id/txtBUDAT"

            android:layout_width="200dip"

            android:layout_height="wrap_content"

            android:inputType="date">

        </EditText>

    </LinearLayout>

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

        <Button

            android:id="@+id/btnPrevious04"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPrevious"

            android:textStyle="bold" ></Button>

        <Button

            android:id="@+id/btnNext04"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strNext"

            android:textStyle="bold" ></Button>

    </LinearLayout>

    

</LinearLayout>

equiment.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    

    <TextView

        android:textStyle="bold"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/strEquipment" ></TextView>

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <ScrollView

        android:id="@+id/scrollView3"

        android:layout_width="fill_parent"   

        android:layout_height="300dip"  

        android:scrollbars="vertical"  >

        <HorizontalScrollView

            android:id="@+id/horizontalScrollView3"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:fillViewport="true" >

            <TableLayout  

                android:id="@+id/tabEquipmentList"  

                android:layout_width="wrap_content"  

                android:layout_height="wrap_content"  

                android:stretchColumns="2" >

                <TableRow>

                    <RadioButton 

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:visibility="invisible"></RadioButton>

                    <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strZzsb" ></TextView>

                

                     <TextView

                        android:layout_width="fill_parent"

                        android:layout_height="wrap_content"

                        android:text="@string/strZzsbms" ></TextView>

                </TableRow>        

            </TableLayout>

        </HorizontalScrollView>

    </ScrollView>

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

        <Button

            android:id="@+id/btnPrevious05"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPrevious"

            android:textStyle="bold" ></Button>

        <Button

            android:id="@+id/btnFinish"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strFinish"

            android:textStyle="bold" ></Button>

    </LinearLayout>



</LinearLayout>

result.xml :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    

    <TextView 

        android:textStyle="bold"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/strResult" ></TextView>

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="vertical" 

        android:focusable="true" 

        android:focusableInTouchMode="true">

        <TextView 

            android:id="@+id/txtContent"

            android:textStyle="bold"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content" ></TextView>

    </LinearLayout>

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="1dip"

        android:background="@color/white"></TextView>

    

    <LinearLayout 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

        <Button

            android:id="@+id/btnPrevious06"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strPrevious"

            android:textStyle="bold" ></Button>

        <Button

            android:id="@+id/btnExit"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/strExit"

            android:textStyle="bold" ></Button>

    </LinearLayout>

</LinearLayout>

最后奉上程序清单文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.fungchoi.sap"

    android:versionCode="1"

    android:versionName="1.0" >



    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

    <!-- Internet Permissions -->    

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    <!-- Network State Permissions -->

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    



    <application

        android:icon="@drawable/fc48"

        android:label="@string/app_name" >

        <activity

            android:name=".LoginActivity"          

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <activity

            android:name=".MainActivity"

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor"></activity>

        <activity

            android:name=".OrderListActivity"

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor"></activity>

        <activity 

            android:name=".StepListActivity"

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor"></activity>

        <activity 

            android:name=".ZuoYeActivity"

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor"></activity>

        <activity 

            android:name=".DateTimeActivity"

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor"></activity>

        <activity 

            android:name=".EquipmentActivity"

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor"></activity>

        <activity 

            android:name=".ResultActivity"

            android:configChanges="orientation|keyboardHidden"

            android:screenOrientation="nosensor"></activity>

    </application>



</manifest>

最终的效果图:

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

跟SAP系统集成的Android应用

 

说完Android Client部分,现在来聊一聊SAP部分:

首先得应用事务码SICF创建ICF服务:

跟SAP系统集成的Android应用

现在来看一看每一个服务的处理逻辑部分

service0000:

method IF_HTTP_EXTENSION~HANDLE_REQUEST.

  data: lv_username type String,

        lv_password type String.



  lv_username = server->request->get_form_field( 'UserName' )."get_form_field get_uri_parameter get_header_field

  lv_password = server->request->get_form_field( 'Password' )."get_form_field





  CALL METHOD server->response->set_header_field( name = 'Content-Type' value = 'text/plain; charset=utf-8' ).

  call method server->response->set_cdata( data = 'success' ).





endmethod.

service0001:

method IF_HTTP_EXTENSION~HANDLE_REQUEST.

  data: lv_begindate type afko-gstrp,

        lv_enddate type afko-gltrp,

        lv_ordercode type String,

        lv_material type makt-maktx,



        wa_list type ZFC_PPS029,

        ltd_list like table of wa_list,

        lv_count type i,

        lv_OrderList type ref to ZJSON4ABAP,

        content type string.



  lv_begindate = server->request->get_form_field( 'BeginDate' )."get_form_field get_uri_parameter get_header_field

  lv_enddate = server->request->get_form_field( 'EndDate' )."get_form_field

  lv_ordercode = server->request->get_form_field( 'OrderCode' )."get_form_field

  lv_material = server->request->get_form_field( 'MaterialDesc' )."get_form_field



  CALL FUNCTION 'ZFC_PPF011'

    EXPORTING

      BEGINDATE          = lv_begindate

      ENDDATE            = lv_enddate

      ORDERCODE          = lv_ordercode

      MATERIALDESC       = lv_material

    TABLES

      ORDERLIST          = ltd_list.





  CALL METHOD server->response->set_header_field( name = 'Content-Type' value = 'text/plain; charset=utf-8' ).



  describe table ltd_list lines lv_count.

  if lv_count > 0.

    create object lv_OrderList.

    content = lv_OrderList->json( abapdata = ltd_list name = '' ).

  endif.



  call method server->response->set_cdata( data = content ).





endmethod.

 

service0002:

method IF_HTTP_EXTENSION~HANDLE_REQUEST.

  data: lv_ordercode type afko-aufnr,



        wa_list type ZFC_PPS030,

        ltd_list like table of wa_list,

        lv_count type i,

        StepList type ref to ZJSON4ABAP,

        content type string.



  lv_ordercode = server->request->get_form_field( 'OrderCode' )."get_form_field get_uri_parameter get_header_field



  CALL FUNCTION 'ZFC_PPF012'

    EXPORTING

      ORDERCODE       = lv_ordercode

    TABLES

      STEPLIST        = ltd_list.





  CALL METHOD server->response->set_header_field( name = 'Content-Type' value = 'text/plain; charset=utf-8' ).



  describe table ltd_list lines lv_count.

  if lv_count > 0.

    create object StepList.

    content = StepList->json( abapdata = ltd_list name = '' ).

  endif.



  call method server->response->set_cdata( data = content ).





endmethod.

 

service0003:

method IF_HTTP_EXTENSION~HANDLE_REQUEST.

  data: lv_ordercode type afko-aufnr,

        lv_vornr type afvc-vornr,

        lv_quantity type afvv-mgvrg,



        wa_list type ZFC_PPS031,

        ltd_list like table of wa_list,

        lv_count type i,

        ZuoYeList type ref to ZJSON4ABAP,

        content type string.



  lv_ordercode = server->request->get_form_field( 'OrderCode' )."get_form_field get_uri_parameter get_header_field

  lv_vornr = server->request->get_form_field( 'StepCode' )."get_form_field

  lv_quantity = server->request->get_form_field( 'Quantity' )."get_form_field



  CALL FUNCTION 'ZFC_PPF013'

   EXPORTING

     ORDERCODE       = lv_ordercode

     STEPNUM         = lv_vornr

     QUANTITY        = lv_quantity

   TABLES

     ZUOYE           = ltd_list.





  CALL METHOD server->response->set_header_field( name = 'Content-Type' value = 'text/plain; charset=utf-8' ).



  describe table ltd_list lines lv_count.

  if lv_count > 0.

    create object ZuoYeList.

    content = ZuoYeList->json( abapdata = ltd_list name = '' ).

  endif.



  call method server->response->set_cdata( data = content ).





endmethod.

 

service0004:

method IF_HTTP_EXTENSION~HANDLE_REQUEST.

  data: lv_ordercode type afko-aufnr,



        wa_list type ZFC_PPS032,

        ltd_list like table of wa_list,

        lv_count type i,

        MachineList type ref to ZJSON4ABAP,

        content type string.



  lv_ordercode = server->request->get_form_field( 'OrderCode' )."get_form_field get_uri_parameter get_header_field



  CALL FUNCTION 'ZFC_PPF014'

    EXPORTING

      ORDERCODE         = lv_ordercode

    TABLES

      MACHINELIST       = ltd_list.





  CALL METHOD server->response->set_header_field( name = 'Content-Type' value = 'text/plain; charset=utf-8' ).



  describe table ltd_list lines lv_count.

  if lv_count > 0.

    create object MachineList.

    content = MachineList->json( abapdata = ltd_list name = '' ).

  endif.



  call method server->response->set_cdata( data = content ).





endmethod.

 

service0005:

method IF_HTTP_EXTENSION~HANDLE_REQUEST.

  data: lv_AUFNR type afru-aufnr,

        lv_VORNR type afru-vornr,

        lv_LMNGA type BDC_FVAL,"afru-lmnga,

        lv_MEINH type afru-meinh,

        lv_ISM01 type BDC_FVAL,"afru-ism01,

        lv_ILE01 type afru-ile01,

        lv_ISM02 type BDC_FVAL,"afru-ism02,

        lv_ILE02 type afru-ile02,

        lv_ISM03 type BDC_FVAL,"afru-ism03,

        lv_ILE03 type afru-ile03,

        lv_ISM04 type BDC_FVAL,"afru-ism04,

        lv_ILE04 type afru-ile04,

        lv_ISM05 type BDC_FVAL,"afru-ism05,

        lv_ILE05 type afru-ile05,

        lv_ISM06 type BDC_FVAL,"afru-ism06,

        lv_ILE06 type afru-ile06,

        lv_ISDD type afru-isdd,

        lv_ISDZ type afru-isdz,

        lv_IEDD type afru-iedd,

        lv_IEDZ type afru-iedz,

        lv_BUDAT type afru-budat,

        lv_LTXA1 type afru-ltxa1,

        lv_ZZSB type afru-zzsb,



        wa_list type ZFC_PPS029,

        ltd_list like table of wa_list,

        lv_count type i,

        lv_OrderList type ref to ZJSON4ABAP,

        content type string.



  lv_AUFNR = server->request->get_form_field( 'AUFNR' ).

  lv_VORNR = server->request->get_form_field( 'VORNR' ).

  lv_LMNGA = server->request->get_form_field( 'LMNGA' ).

  lv_MEINH = server->request->get_form_field( 'MEINH' ).

  lv_ISM01 = server->request->get_form_field( 'ISM01' ).

  lv_ILE01 = server->request->get_form_field( 'ILE01' ).

  lv_ISM02 = server->request->get_form_field( 'ISM02' ).

  lv_ILE02 = server->request->get_form_field( 'ILE02' ).

  lv_ISM03 = server->request->get_form_field( 'ISM03' ).

  lv_ILE03 = server->request->get_form_field( 'ILE03' ).

  lv_ISM04 = server->request->get_form_field( 'ISM04' ).

  lv_ILE04 = server->request->get_form_field( 'ILE04' ).

  lv_ISM05 = server->request->get_form_field( 'ISM05' ).

  lv_ILE05 = server->request->get_form_field( 'ILE05' ).

  lv_ISM06 = server->request->get_form_field( 'ISM06' ).

  lv_ILE06 = server->request->get_form_field( 'ILE06' ).

  lv_ISDD = server->request->get_form_field( 'ISDD' ).

  lv_ISDZ = server->request->get_form_field( 'ISDZ' ).

  lv_IEDD = server->request->get_form_field( 'IEDD' ).

  lv_IEDZ = server->request->get_form_field( 'IEDZ' ).

  lv_BUDAT = server->request->get_form_field( 'BUDAT' ).

  lv_LTXA1 = server->request->get_form_field( 'LTXA1' ).

  lv_ZZSB = server->request->get_form_field( 'ZZSB' ).



  CALL FUNCTION 'ZFC_PPF015'

    EXPORTING

      AUFNR         = lv_AUFNR

      VORNR         = lv_VORNR

      LMNGA         = lv_LMNGA

      MEINH         = lv_MEINH



      ISM01         = lv_ISM01

      ILE01         = lv_ILE01



      ISM02         = lv_ISM02

      ILE02         = lv_ILE02



      ISM03         = lv_ISM03

      ILE03         = lv_ILE03



      ISM04         = lv_ISM04

      ILE04         = lv_ILE04



      ISM05         = lv_ISM05

      ILE05         = lv_ILE05



      ISM06         = lv_ISM06

      ILE06         = lv_ILE06



      ISDD          = lv_ISDD

      ISDZ          = lv_ISDZ



      IEDD          = lv_IEDD

      IEDZ          = lv_IEDZ



      BUDAT         = lv_BUDAT

      LTXA1         = lv_LTXA1

      ZZSB          = lv_ZZSB

    IMPORTING

      MESSAGE       = content.











  CALL METHOD server->response->set_header_field( name = 'Content-Type' value = 'text/plain; charset=utf-8' ).



  call method server->response->set_cdata( data = content ).





endmethod.

在每一个服务处理逻辑里面又分别引用到了SAP处理函数:

FUNCTION ZFC_PPF011.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(BEGINDATE) TYPE  CO_GSTRP

*"     VALUE(ENDDATE) TYPE  CO_GLTRP

*"     VALUE(ORDERCODE) TYPE  STRING OPTIONAL

*"     VALUE(MATERIALDESC) TYPE  MAKTX OPTIONAL

*"  TABLES

*"      ORDERLIST STRUCTURE  ZFC_PPS029 OPTIONAL

*"----------------------------------------------------------------------



    data: lv_text type string,

          lv_code type string,

          lv_temp type string,

          lth_orderlist type ZFC_PPS029.



    concatenate '%' MATERIALDESC '%' into lv_text.

    concatenate '%' ORDERCODE '%' into lv_code.



    select ak~AUFNR

           mt~MAKTX

           ak~GAMNG

           ak~IGMNG

           ak~GMEIN as MEINS

           ta~mseht

    into corresponding fields of table orderlist

    from afko as ak

    inner join makt as mt on mt~matnr = ak~plnbez and mt~spras = '1'

    left join t006a as ta on ta~msehi = ak~gmein and ta~spras = '1'

    where ak~aufnr like lv_code and

          ( ( ak~gstrp between begindate and enddate ) or ( ak~gltrp between begindate and enddate ) ) and

          mt~maktx like lv_text.



    loop at orderlist into lth_orderlist.

      clear lv_temp.

      select single js~stat

        into lv_temp

        from aufk as ak

        inner join jest as js on ak~OBJNR = js~OBJNR and js~INACT <> 'X'

        inner join tj02t as tt on tt~ISTAT = js~STAT and tt~SPRAS = '1'

        where ak~aufnr = lth_orderlist-aufnr and ( tt~ISTAT = 'I0002' or tt~ISTAT = 'I0010' ).



      if lv_temp <> 'I0002' and lv_temp <> 'I0010'.

        delete table orderlist from lth_orderlist.

      endif.

    endloop.



    sort orderlist by aufnr descending.





ENDFUNCTION.
FUNCTION ZFC_PPF012.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(ORDERCODE) TYPE  AUFNR

*"  TABLES

*"      STEPLIST STRUCTURE  ZFC_PPS030 OPTIONAL

*"----------------------------------------------------------------------



    data: lth_steplist type ZFC_PPS030,

          lv_sum type afvv-mgvrg.



    select distinct

        ac~vornr"工序序号

        ac~steus"控制码

        ac~ltxa1"工序描述

        av~mgvrg"工序数量

        av~MEINH"作业/工序的计量单位

        ta~mseht"中文单位

        ac~rueck"确认号

        into corresponding fields of table steplist

        from afko as ak

        inner join afvc as ac on ac~aufpl = ak~aufpl

        inner join afvv as av on av~aufpl = ac~aufpl and av~aplzl = ac~aplzl

        left join t006a as ta on ta~msehi = av~meinh and ta~spras = '1'

        where ak~aufnr = ordercode and ( ac~steus = 'ZP01' or ac~steus = 'ZP03' ).



    loop at steplist into lth_steplist.

      clear lv_sum.

      select sum( gmnga ) into lv_sum

        from afru

        where rueck = lth_steplist-rueck and STOKZ = '' and STZHL = ''."STOKZ = 'X'表示已冲销,被取消报工的原始记录;STZHL >= 1 表示取消报工的记录

      if lv_sum > 0.

        lth_steplist-mgvrg = lth_steplist-mgvrg - lv_sum.

        if lth_steplist-mgvrg <= 0.

          delete table steplist from lth_steplist.

        else.

          modify steplist from lth_steplist transporting mgvrg.

        endif.

      endif.

    endloop.



    sort steplist by vornr ascending.



ENDFUNCTION.
FUNCTION ZFC_PPF013.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(ORDERCODE) TYPE  AUFNR

*"     VALUE(STEPNUM) TYPE  VORNR

*"     VALUE(QUANTITY) TYPE  MGVRG

*"  TABLES

*"      ZUOYE STRUCTURE  ZFC_PPS031 OPTIONAL

*"----------------------------------------------------------------------

data: begin of lth_zuoye,

        BMSCH like afvv-bmsch,

        VGW01 like afvv-vgw01,

        VGW02 like afvv-vgw02,

        VGW03 like afvv-vgw03,

        VGW04 like afvv-vgw04,

        VGW05 like afvv-vgw05,

        VGW06 like afvv-vgw06,

        VGE01 like afvv-vge01,

        VGE02 like afvv-vge02,

        VGE03 like afvv-vge03,

        VGE04 like afvv-vge04,

        VGE05 like afvv-vge05,

        VGE06 like afvv-vge06,

        MGVRG like afvv-mgvrg,

      end of lth_zuoye,

      lth_zuoye2 type zfc_pps031.



select single

    av~BMSCH

    av~VGW01

    av~VGW02

    av~VGW03

    av~VGW04

    av~VGW05

    av~VGW06

    av~VGE01

    av~VGE02

    av~VGE03

    av~VGE04

    av~VGE05

    av~VGE06

    av~MGVRG

    into (lth_zuoye-BMSCH,

    lth_zuoye-VGW01,

    lth_zuoye-VGW02,

    lth_zuoye-VGW03,

    lth_zuoye-VGW04,

    lth_zuoye-VGW05,

    lth_zuoye-VGW06,

    lth_zuoye-VGE01,

    lth_zuoye-VGE02,

    lth_zuoye-VGE03,

    lth_zuoye-VGE04,

    lth_zuoye-VGE05,

    lth_zuoye-VGE06,

    lth_zuoye-MGVRG)

    from afko as ak

    inner join afvc as ac on ac~aufpl = ak~aufpl

    inner join afvv as av on av~aufpl = ac~aufpl and av~aplzl = ac~aplzl

    where ak~aufnr = ordercode and ac~vornr = stepnum and ( ac~steus = 'ZP01' or ac~steus = 'ZP03' ).



if quantity <> lth_zuoye-mgvrg.

  lth_zuoye-vgw01 = quantity * lth_zuoye-vgw01 / lth_zuoye-bmsch.

  lth_zuoye-vgw02 = quantity * lth_zuoye-vgw02 / lth_zuoye-bmsch.

  lth_zuoye-vgw03 = quantity * lth_zuoye-vgw03 / lth_zuoye-bmsch.

  lth_zuoye-vgw04 = quantity * lth_zuoye-vgw04 / lth_zuoye-bmsch.

  lth_zuoye-vgw05 = quantity * lth_zuoye-vgw05 / lth_zuoye-bmsch.

  lth_zuoye-vgw06 = quantity * lth_zuoye-vgw06 / lth_zuoye-bmsch.

endif.



if lth_zuoye-vgw01 >= 60.

  lth_zuoye-vgw01 = lth_zuoye-vgw01 / 60.

  lth_zuoye-vge01 = 'H'.

endif.



if lth_zuoye-vgw02 >= 60.

  lth_zuoye-vgw02 = lth_zuoye-vgw02 / 60.

  lth_zuoye-vge02 = 'H'.

endif.



if lth_zuoye-vgw03 >= 60.

  lth_zuoye-vgw03 = lth_zuoye-vgw03 / 60.

  lth_zuoye-vge03 = 'H'.

endif.



if lth_zuoye-vgw05 >= 60.

  lth_zuoye-vgw05 = lth_zuoye-vgw05 / 60.

  lth_zuoye-vge05 = 'H'.

endif.



if lth_zuoye-vgw06 >= 60.

  lth_zuoye-vgw06 = lth_zuoye-vgw06 / 60.

  lth_zuoye-vge06 = 'H'.

endif.



move-corresponding lth_zuoye to lth_zuoye2.

append lth_zuoye2 to zuoye.



ENDFUNCTION.
FUNCTION ZFC_PPF014.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(ORDERCODE) TYPE  AUFNR

*"  TABLES

*"      MACHINELIST STRUCTURE  ZFC_PPS032 OPTIONAL

*"----------------------------------------------------------------------



data: begin of lth_machine,

        zzsb like zfc_pptm_sbnl-zzsb,

        zzsbms like zfc_pptm_sbnl-zzsbms,

      end of lth_machine.





select distinct

    sb~ZZSB

    sb~ZZSBMS

    into corresponding fields of table machinelist

    from afko as ak

    inner join afvc as ac on ac~aufpl = ak~aufpl

    inner join afvv as av on av~aufpl = ac~aufpl and av~aplzl = ac~aplzl

    left join crhd as ch on ch~objid = ac~arbid

    inner join ZFC_PPTM_SBNL as sb on sb~arbpl = ch~arbpl

    where ak~aufnr = ordercode and ( ac~steus = 'ZP01' or ac~steus = 'ZP03' ).



loop at machinelist into lth_machine.

  if lth_machine-zzsb+0(2) = 'ZX'.

    delete table machinelist from lth_machine.

  endif.

endloop.



sort machinelist by zzsb descending.



ENDFUNCTION.
FUNCTION ZFC_PPF015.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(AUFNR) TYPE  AUFNR

*"     VALUE(VORNR) TYPE  VORNR

*"     VALUE(LMNGA) TYPE  BDC_FVAL

*"     VALUE(MEINH) TYPE  RU_VORME

*"     VALUE(ISM01) TYPE  BDC_FVAL

*"     VALUE(ILE01) TYPE  CO_ISMNGEH

*"     VALUE(ISM02) TYPE  BDC_FVAL

*"     VALUE(ILE02) TYPE  CO_ISMNGEH

*"     VALUE(ISM03) TYPE  BDC_FVAL

*"     VALUE(ILE03) TYPE  CO_ISMNGEH

*"     VALUE(ISM04) TYPE  BDC_FVAL

*"     VALUE(ILE04) TYPE  CO_ISMNGEH

*"     VALUE(ISM05) TYPE  BDC_FVAL

*"     VALUE(ILE05) TYPE  CO_ISMNGEH

*"     VALUE(ISM06) TYPE  BDC_FVAL

*"     VALUE(ILE06) TYPE  CO_ISMNGEH

*"     VALUE(ISDD) TYPE  RU_ISDD

*"     VALUE(ISDZ) TYPE  RU_ISDZ

*"     VALUE(IEDD) TYPE  RU_IEDD

*"     VALUE(IEDZ) TYPE  RU_IEDZ

*"     VALUE(BUDAT) TYPE  BUCHDATUM

*"     VALUE(LTXA1) TYPE  CO_RTEXT

*"     VALUE(ZZSB) TYPE  ZZSB

*"  EXPORTING

*"     VALUE(MESSAGE) TYPE  CHAR8000_D

*"----------------------------------------------------------------------



    "-----------------先对生产订单进行校验-------开始---------------------

    data: lv_aufnr like afko-aufnr,

          lv_flag type c length 1,

          lv_iscan type c length 1 value 'X'.

    lv_aufnr = aufnr.

    shift lv_aufnr left deleting leading '0'.

    lv_flag = lv_aufnr+0(1).

    if lv_flag = '6'.

      CALL FUNCTION 'ZFC_PPF038'

       EXPORTING

         P_AUFNR       = aufnr

         P_VORNR       = vornr

       IMPORTING

         P_FLAG        = lv_iscan.



      if lv_iscan = ''.

        message = '半品组件存在不全完报工情况!'.

        return.

      endif.

    endif.

    "-----------------先对生产订单进行校验-------结束---------------------





    DATA: bdcdata_wa  TYPE BDCDATA,

          bdcdata_tab TYPE TABLE OF BDCDATA.

    DATA: wa_bdcmsg TYPE BDCMSGCOLL,

          it_bdcmsg TYPE TABLE OF BDCMSGCOLL.



    DATA opt TYPE CTU_PARAMS.



    DATA: gth_timeticket type BAPI_PP_TIMETICKET,

          gtd_timeticket type table of BAPI_PP_TIMETICKET.



    "设置初始值

    CLEAR bdcdata_wa.

    bdcdata_wa-program  = 'SAPLCORU_S'.

    bdcdata_wa-dynpro   = '0100'.

    bdcdata_wa-dynbegin = 'X'."开始标志

    APPEND bdcdata_wa TO bdcdata_tab.



    "---------模拟屏字段赋值开始-----------------------------

    "生产订单

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-AUFNR'.

    bdcdata_wa-fval = AUFNR.

    APPEND bdcdata_wa TO bdcdata_tab.



    "工序

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-VORNR'.

    bdcdata_wa-fval = VORNR.

    APPEND bdcdata_wa TO bdcdata_tab.



    "确认类型

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-AUERU'.

    bdcdata_wa-fval = '1'.

    APPEND bdcdata_wa TO bdcdata_tab.



    "产量

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-LMNGA'.

    bdcdata_wa-fval = LMNGA.

    APPEND bdcdata_wa TO bdcdata_tab.



    "产量-单位

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-MEINH'.

    bdcdata_wa-fval = MEINH.

    APPEND bdcdata_wa TO bdcdata_tab.



    "人工

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISM01'.

    bdcdata_wa-fval = ISM01.

    APPEND bdcdata_wa TO bdcdata_tab.



    "人工-单位

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ILE01'.

    bdcdata_wa-fval = ILE01.

    APPEND bdcdata_wa TO bdcdata_tab.



    "动力

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISM02'.

    bdcdata_wa-fval = ISM02.

    APPEND bdcdata_wa TO bdcdata_tab.



    "动力-单位

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ILE02'.

    bdcdata_wa-fval = ILE02.

    APPEND bdcdata_wa TO bdcdata_tab.



    "机器

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISM03'.

    bdcdata_wa-fval = ISM03.

    APPEND bdcdata_wa TO bdcdata_tab.



    "机器-单位

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ILE03'.

    bdcdata_wa-fval = ILE03.

    APPEND bdcdata_wa TO bdcdata_tab.



    "油墨

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISM04'.

    bdcdata_wa-fval = ISM04.

    APPEND bdcdata_wa TO bdcdata_tab.



    "油墨-单位

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ILE04'.

    bdcdata_wa-fval = ILE04.

    APPEND bdcdata_wa TO bdcdata_tab.



    "通用材料

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISM05'.

    bdcdata_wa-fval = ISM05.

    APPEND bdcdata_wa TO bdcdata_tab.



    "通用材料-单位

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ILE05'.

    bdcdata_wa-fval = ILE05.

    APPEND bdcdata_wa TO bdcdata_tab.



    "其他

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISM06'.

    bdcdata_wa-fval = ISM06.

    APPEND bdcdata_wa TO bdcdata_tab.



    "其他-单位

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ILE06'.

    bdcdata_wa-fval = ILE06.

    APPEND bdcdata_wa TO bdcdata_tab.



    "开始执行日期

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISDD'.

    bdcdata_wa-fval = ISDD.

    APPEND bdcdata_wa TO bdcdata_tab.



    "开始执行时间

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-ISDZ'.

    bdcdata_wa-fval = ISDZ.

    APPEND bdcdata_wa TO bdcdata_tab.



    "结束执行日期

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-IEDD'.

    bdcdata_wa-fval = IEDD.

    APPEND bdcdata_wa TO bdcdata_tab.



    "结束执行时间

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-IEDZ'.

    bdcdata_wa-fval = IEDZ.

    APPEND bdcdata_wa TO bdcdata_tab.



    "记账日期

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-BUDAT'.

    bdcdata_wa-fval = BUDAT.

    APPEND bdcdata_wa TO bdcdata_tab.



    "确认文本

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'AFRUD-LTXA1'.

    bdcdata_wa-fval = LTXA1.

    APPEND bdcdata_wa TO bdcdata_tab.



    "设备编号

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'ZAFRU-ZZSB'.

    bdcdata_wa-fval = ZZSB.

    APPEND bdcdata_wa TO bdcdata_tab.



*    "工厂

*    CLEAR bdcdata_wa.

*    bdcdata_wa-fnam = 'AFVGD-WERKS'.

*    bdcdata_wa-fval = '1000'.

*    APPEND bdcdata_wa TO bdcdata_tab.

*

*    "工作中心

*    CLEAR bdcdata_wa.

*    bdcdata_wa-fnam = 'AFVGD-ARBPL'.

*    bdcdata_wa-fval = 'ZX030104'.

*    APPEND bdcdata_wa TO bdcdata_tab.

*

*    "物料

*    CLEAR bdcdata_wa.

*    bdcdata_wa-fnam = 'CAUFVD-MATNR'.

*    bdcdata_wa-fval = '610000000001'.

*    APPEND bdcdata_wa TO bdcdata_tab.





    "获取确认号

    gth_timeticket-ORDERID  = AUFNR.

    gth_timeticket-OPERATION  = VORNR.

    append gth_timeticket to gtd_timeticket.

    CALL FUNCTION 'BAPI_PRODORDCONF_GET_TT_PROP'

      TABLES

        TIMETICKETS = gtd_timeticket.

    IF SY-SUBRC = 0.

      read table gtd_timeticket index 1 into gth_timeticket.

      CLEAR bdcdata_wa.

      bdcdata_wa-fnam = 'AFRUD-RUECK'.

      bdcdata_wa-fval = gth_timeticket-CONF_NO.

      APPEND bdcdata_wa TO bdcdata_tab.

    endif.

    "---------模拟屏字段赋值结束-----------------------------



    "模拟点击屏幕保存按钮

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'BDC_OKCODE'.

    bdcdata_wa-fval = '=BU'.

    APPEND bdcdata_wa TO bdcdata_tab.



    "-----------------为了避开--是否确定选择额外设备?--开始-------------------------------

    CLEAR bdcdata_wa.

    bdcdata_wa-program  = 'SAPLXCOF'.

    bdcdata_wa-dynpro   = '0900'.

    bdcdata_wa-dynbegin = 'X'."开始标志

    APPEND bdcdata_wa TO bdcdata_tab.

    "回车

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'BDC_OKCODE'.

    bdcdata_wa-fval = '/00'.

    APPEND bdcdata_wa TO bdcdata_tab.

    "确定

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'BDC_OKCODE'.

    bdcdata_wa-fval = '=YES'.

    APPEND bdcdata_wa TO bdcdata_tab.

    "回车

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'BDC_OKCODE'.

    bdcdata_wa-fval = '/00'.

    APPEND bdcdata_wa TO bdcdata_tab.

    "-----------------为了避开--是否确定选择额外设备?--结束-------------------------------



    "-----------------为了避开--过量交货黄色警告信息--开始-------------------------------

    CLEAR bdcdata_wa.

    bdcdata_wa-program  = 'SAPLCORU_S'.

    bdcdata_wa-dynpro   = '0100'.

    bdcdata_wa-dynbegin = 'X'."开始标志

    APPEND bdcdata_wa TO bdcdata_tab.

    "回车

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'BDC_OKCODE'.

    bdcdata_wa-fval = '/00'.

    APPEND bdcdata_wa TO bdcdata_tab.

    "确定

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'BDC_OKCODE'.

    bdcdata_wa-fval = '/00'.

    APPEND bdcdata_wa TO bdcdata_tab.

    "回车

    CLEAR bdcdata_wa.

    bdcdata_wa-fnam = 'BDC_OKCODE'.

    bdcdata_wa-fval = '/00'.

    APPEND bdcdata_wa TO bdcdata_tab.

    "-----------------为了避开--过量交货黄色警告信息--结束-------------------------------



    opt-dismode = 'N'.

    opt-defsize = 'X'.

    CALL TRANSACTION 'CO11N' USING bdcdata_tab OPTIONS FROM opt MESSAGES INTO it_bdcmsg.



    IF SY-SUBRC = 0.

      MESSAGE = '报工成功!'.

    ELSE.

      data: lv_temp type string.

      MESSAGE = '报工失败!请尝试在SAP系统报工。服务器程序执行错误。'.

      LOOP AT it_bdcmsg INTO wa_bdcmsg.

        CALL FUNCTION 'MESSAGE_TEXT_BUILD'

          EXPORTING

            msgid               = wa_bdcmsg-msgid

            msgnr               = wa_bdcmsg-msgnr

            msgv1               = wa_bdcmsg-msgv1

            msgv2               = wa_bdcmsg-msgv2

            msgv3               = wa_bdcmsg-msgv3

            msgv4               = wa_bdcmsg-msgv4

          IMPORTING

            message_text_output = lv_temp.

        concatenate message lv_temp into message.

      ENDLOOP.

    ENDIF.



ENDFUNCTION.

SAP里面引用到的数据结构就不弄出来了,太麻烦了。

 

 

 

 

你可能感兴趣的:(android)