修改 MobiLink 用户名。
在下表中,说明部分提供 SQL 数据类型。如果您使用 Java 或 .NET 编写脚本,则应该使用相应的数据类型。 请参见SQL-Java 数据类型和SQL-.NET 数据类型。
在 SQL 脚本中,可以按名称或使用问号指定事件参数。不建议使用问号,建议您使用命名参数。不能在一个脚本中混合使用名称和问号。如果使用问号,则参数必须按照如下所示的顺序并且仅当没有指定任何后继参数时才是可选的(例如,如果您想使用参数 2,则必须使用参数 1)。如果使用命名参数,则可以按照任何顺序指定任意参数子集。
SQL 脚本的参数名称 | 说明 | 顺序(不建议用于 SQL) |
---|---|---|
s.remote_id | VARCHAR(128)。MobiLink 远程 ID。只有在使用命名参数时才能引用远程 ID。 | 不适用 |
s.username |
VARCHAR(128)。MobiLink 用户名。这是一个 INOUT 参数。 |
1 |
s.script_version | VARCHAR(128)。可选的 IN 参数,可指定 MobiLink 服务器将用于当前同步的脚本版本字符串传递到此参数。不能使用问号指定此参数。 | 不适用 |
无。
本脚本会在验证事务结束时被调用。
MobiLink 服务器在调用脚本时以参数形式提供用户名,用户名由 MobiLink 客户端发送。有时,您需要使用另一个用户名。此脚本用于修改在调用 MobiLink 脚本过程中使用的用户名。
用户名参数必须足够长以保存用户名。
modify_user 事件的 SQL 脚本必须作为存储过程实现。
一种映射 MobiLink 用户名的更灵活的方式是使用用户定义的命名参数。 请参见用户定义的命名参数。
以下示例通过使用名为 user_device 的映射表将远程数据库用户名映射到使用该设备的用户的 ID。当同一个人拥有需要使用相同的同步逻辑(根据该用户的名称或 ID)的多个远程数据库(如 PDA 和膝上型计算机)时,可以采用此技术。
以下对 MobiLink 系统过程的调用将 ModifyUser 存储过程指派给 modify_user 事件。此语法用于 SQL Anywhere 统一数据库。
CALL ml_add_connection_script( 'ver1', 'modify_user', 'call ModifyUser( {ml s.username} )' ) |
以下 SQL 语句创建 ModifyUser 存储过程。
CREATE PROCEDURE ModifyUser( INOUT u_name varchar(128) ) BEGIN SELECT user_name INTO u_name FROM user_device WHERE device_name = u_name; END |
以下对 MobiLink 系统过程的调用在同步脚本版本 ver1 时将名为 modifyUser 的 Java 方法注册为 modify_user 连接事件的脚本。
CALL ml_add_java_connection_script( 'ver1', 'modify_user', 'ExamplePackage.ExampleClass.modifyUser' ) |
以下是 Java 方法 modifyUser 示例。它从数据库获取用户 ID,然后使用该 ID 设置用户名。
package ExamplePackage; import java.lang.Integer; import java.sql.*; import ianywhere.ml.script.*; public class ExampleClass { DBConnectionContext curConn; public ExampleClass( DBConnectionContext cc ) { curConn = cc; } public void modifyUser( InOutString ioUserName ) throws SQLException { Connection conn = curConn.getConnection(); PreparedStatement uidSelect = conn.prepareStatement( "SELECT rep_id FROM SalesRep WHERE name = ?" ); try { uidSelect.setString( 1, ioUserName.getValue() ); ResultSet uidResult = uidSelect.executeQuery(); try { if( uidResult.next() ) { ioUserName.setValue( Integer.toString(uidResult.getInt( 1 ))); } } finally { uidResult.close(); } } finally { uidSelect.close(); } } } |
以下对 MobiLink 系统过程的调用在同步脚本版本 ver1 时将名为 ModUser 的 .NET 方法注册为 modify_user 连接事件的脚本。
CALL ml_add_dnet_connection_script( 'ver1', 'modify_user', 'TestScripts.Test.ModUser' ) |
以下是 .NET 方法 ModUser 示例。
using iAnywhere.MobiLink.Script; namespace TestScripts { public class Test { DBConnectionContext curConn; public Test( DBConnectionContext cc ) { curConn = cc; } public void ModifyUser( ref string ioUserName ) { DBCommand cmd = curConn.GetConnection().CreateCommand(); cmd.CommandText = "SELECT rep_id FROM SalesRep WHERE name = ?"; cmd.Parameters[0] = ioUserName; DBRowReader r = cmd.ExecuteReader(); object[] row; if( (row = r.NextRow()) != null ) { ioUserName = (string) row[0]; } } } } |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |