我负责维护一些旧代码,我们在其中从邮件中提取Notes链接,并将其转换为可在本地计算机(安装了Notes)上从HTML调用的链接。我们的情况是一个链接起作用,而另一个链接起作用。
我很难理解这段代码究竟是做什么的,以及为什么它甚至可以起作用。基本上,我们正在查看电子邮件中的“$ Links”属性。例如,在Notes中查看时,此属性的值类似于:
function apd_product_custom_price($cart_item_data, $product_id)
{
if (isset($_POST['use_rewards']) && !empty($_POST['use_rewards']))
{
$cart_item_data['use_rewards'] = $_POST['use_rewards'];
}
return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'apd_product_custom_price', 99, 2);
function apd_apply_custom_price_to_cart_item($cart_object)
{
if( !WC()->session->__isset( 'reload_checkout' )) {
foreach ($cart_object->cart_contents as $value) {
if(isset($value['use_rewards'])) {
$price = $value['data']->get_price() -
$value['use_rewards'];
$value['data']->set_price($price);
}
}
}
}
add_action('woocommerce_before_calculate_totals', 'apd_apply_custom_price_to_cart_item',10);
我们的代码所做的是使用NSFItemInfo和OSLockBlock获取此属性的二进制值。然后它从偏移量11开始,向后工作8个字节,将每个字节转换为2位十六进制值。然后它再做同样的事情3次,但是从原始11开始向前移动8个字节。在这8个字节段的第1个和第3个之后插入一个'/'字符。然后整个事情被附加到“notes:///”。最后,生成的链接如下所示:
RFC2257F23:004852B9
VFA5208C4C:6552DA01-VN422569FB:003AAC2D
NF6D24A297:6579B8E3-NNC225805D:004D8678
我猜这个值代表了文档链接的Notes UNID,当点击时,它代表了Notes 启动,直接进入文档。那么,是否有人知道为什么一个链接可以工作,并且 另一个失败了?我们的客户声称Notes链接数据库完好无损,可以成功查看 来自Notes本身。
答案 0 :(得分:1)
Notes-链接由协议,服务器部分,数据库部分和数据库中的元素组成。
一个正常的例子是:
注释://server/path/database.nsf/view/keytodocumentinview
每个部分(服务器除外)都可以用内部ID替换。
如果链接中没有服务器,那么Notes客户端会尝试"猜测"合适的服务器。它检查:
所以问题的答案是:
如果客户端找不到对服务器的任何引用,则该链接将不起作用。 因此,最好将正确的服务器添加到链接中(如果您知道的话)。
只是为了解释,如何从一种形式到另一种形式,这里有更多的解释:
有时这些ID的表示方式与$ Links- Item:
中的ID不同第一个字母代表" Type" ID:
R =副本ID V =查看通用ID N =注意通用ID
所有32位值分为16位的2个半部分,前面是另一个字符,告诉" First" (F)或"第二" (= Next,N)值。
其余部分分为8个字母,第一个和第三个八位字节用冒号分隔,上半部分和后半部分用减号分开。
就像你可以很容易看到的那样:
RFC2257F23:004852B9 转换为 FC2257F23004852B9
VFA5208C4C:6552DA01-VN422569FB:003AAC2D 转换为 A5208C4C 6552DA01 422569FB 003AAC2D 和
NF6D24A297:6579B8E3-NNC225805D:004D8678 转化为 6D24A297 6579B8E3 C225805D 004D8678