# 金蝶云星空企业版 C# API 参考

## 核心服务类

### BusinessDataServiceHelper

业务数据服务助手，是最常用的数据访问类。

**常用方法：**

```csharp
// 加载单个数据实体
DynamicObject LoadSingle(Context ctx, object pkValue, string entityName)

// 加载多个数据实体
DynamicObject[] Load(Context ctx, object[] pkValues, string entityName)

// 按条件查询
DynamicObject[] Load(Context ctx, string entityName, QFilter[] filters)

// 按条件查询指定字段
DynamicObject[] Load(Context ctx, string entityName, string selectFields, QFilter[] filters)

// 加载基础资料
DynamicObject LoadSingle(Context ctx, string entityName, object pkValue, QFilter[] filters)
```

**使用示例：**

```csharp
// 加载采购订单
QFilter filter = new QFilter("billno", "=", "PO-001");
DynamicObject[] orders = BusinessDataServiceHelper.Load(
    ctx, 
    "PUR_POOrder", 
    new QFilter[]{filter}
);

if (orders.Length > 0)
{
    DynamicObject order = orders[0];
    string billNo = order["billno"] as string;
    decimal totalAmount = Convert.ToDecimal(order["totalamount"]);
}
```

### DBUtils

数据库工具类，用于执行 SQL 查询。

**常用方法：**

```csharp
// 执行查询，返回 DataSet
DataSet ExecuteDataSet(Context ctx, string sql)

// 执行查询带参数
DataSet ExecuteDataSet(Context ctx, string sql, List<SqlParam> parameters)

// 执行更新
int Execute(Context ctx, string sql)

// 执行更新带参数
int Execute(Context ctx, string sql, List<SqlParam> parameters)
```

**使用示例：**

```csharp
// 查询采购订单
string sql = "SELECT FBILLNO, FDATE, FAMOUNT FROM T_PUR_POORDER WHERE FDOCUMENTSTATUS = 'C'";
DataSet ds = DBUtils.ExecuteDataSet(ctx, sql);

foreach (DataRow row in ds.Tables[0].Rows)
{
    string billNo = row["FBILLNO"] as string;
    DateTime date = Convert.ToDateTime(row["FDATE"]);
    decimal amount = Convert.ToDecimal(row["FAMOUNT"]);
}
```

### IDBAccesser

数据访问接口，提供 ORM 功能。

**常用方法：**

```csharp
// 执行查询
DataSet Query(string sql)

// 执行更新
int Update(string sql)

// 批量插入
void InsertBatch(string tableName, DataSet data)
```

---

## 插件基类

### AbstractOperationServicePlugIn

操作服务插件基类，用于操作事件处理。

**常用事件：**

```csharp
// 准备属性
public override void OnPreparePropertys(PreparePropertysEventArgs e)

// 操作执行前
public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)

// 操作执行后
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)

// 添加校验规则
public override void OnAddValidateRules(AddValidateRulesEventArgs e)
```

### AbstractOperationCheckPlugIn

操作校验插件基类，用于数据校验。

**常用方法：**

```csharp
// 自定义校验规则
public override void OnAddValidateRules(AddValidateRulesEventArgs e)

// 校验数据
public override void Validate(ValidateEventArgs e)
```

### AbstractBillPlugIn

表单插件基类，用于表单事件处理。

**常用事件：**

```csharp
// 表单加载后
public override void AfterBindData(EventArgs e)

// 字段值变更后
public override void AfterPropertyChanged(PropertyChangedEventArgs e)

// 保存前
public override void BeforeSave(BeforeSaveEventArgs e)

// 保存后
public override void AfterSave(EventArgs e)
```

---

## 常用工具类

### StringUtils

字符串处理工具。

```csharp
// 判断是否为空
bool IsEmpty(string str)

// 判断是否不为空
bool IsNotEmpty(string str)

// 去除空格
string Trim(string str)
```

### KDException

金蝶自定义异常。

```csharp
// 抛出异常
throw new KDException("错误编码", "错误信息");

// 带原因的异常
throw new KDException("错误编码", "错误信息", innerException);
```
