CSAP_MAT_BOM_MAINTAIN Alternative ?
Hi Friends ,
I would like to know if there is a BAPI i can use instead of CSAP_MAT_BOM_MAINTAIN. I want to try using a BAPI because this function module is causing change in the ECM number of the other vairant BOMS which were not intended to be changed .
Thank you ,
Hari
Hi Hari,
check in SE37 by doing a F4 on BOMUPD* u will a couple of direct update FM's. But i think they will all update the ECM number.
Try ur luck.
Cheers
VJ
Similar Messages
-
Create Bom with alternative using CSAP_MAT_BOM_MAINTAIN
Hi all,
I am trying to create a new alternative BOM and thought I had to use the function CSAP_MAT_BOM_MAINTAIN. Creating new BOMs with CSAP_MAT_BOM_CREATE works as well as maintaining them with CSAP_MAT_BOM_MAINTAIN, but I fail in creating a new alternative BOM. In the function
CS_DI_HEADER_OBJECT_CHECK (called within the maintain-function ) it says (close to the failure )
"*Anlegen von Alternativen über CSAP nicht erlaubt"
"creation of alternative using csap not allowed" ....
Well, sounds like I am using the wrong function, but which should I use instead ???
Thanx in advance,
KarstenHi,
Use : CS_BI_BOM_CREATE_BATCH_INPUT1 To Create a new BOM or New Alt. BOM.
Use : CS_BC_BOM_CHANGE_BATCH_INPUT to maintain the BOM. -
Error while creating BOM with FM CSAP_MAT_BOM_MAINTAIN
Hi All,
While creating the bom with the FM "CSAP_MAT_BOM_MAINTAIN" using change number i am getting the below error message.
" Processing of this object is not supported with change number."
Please help me out.
Regards
Sureshcall function 'CSAP_MAT_BOM_MAINTAIN'
exporting
material = material
plant = plant
bom_usage = usage
alternative = alternat
valid_from = y_date
* CHANGE_NO = "<----Have u used this field for creating ?
* REVISION_LEVEL =
i_stko = l_stko
* FL_NO_CHANGE_DOC = ' '
fl_commit_and_wait = 'X'
fl_bom_create = 'X'
fl_new_item = ' '
fl_complete = ' '
* IMPORTING
* FL_WARNING =
* O_STKO =
CSAP_MAT_BOM_CREATE would be an ideal one for creation and CSAP_MAT_BOM_MAINTAIN for change
Regards,
Mithun Shetty. -
Error in Creating a BOM / CSAP_MAT_BOM_MAINTAIN
hi,
i need to create multiple bom alternatives in my development. i try using CSAP_MAT_BOM_MAINTAIN for this purpose.
even after i give all the inputs and flags necessary for creating a new bom, i am getting an error stating that bom already exist for....when i go and check MAST table, for the same material, plant and bom usage... no such alternative exist.
i am unable to proceed further. can anyone help me in this regard? thanks in advance.friend... you are right.
CSAP_MAT_BOM_MAINTAIN is used to create only one alternative bom. but this can be any number from 01 to 99. if any alternative bom exist for the same combination of material, plant and bom usage... then you cannot create any more alternative bom for the above mentioned combination. this is because... this function module checks MAST table before proceeding with creation. while checking MAST, it considers only material, plant and bom usage. alternative bom is left out here. but the real fact is... alternative bom should be also considered for uniqueness of bom while checking MAST. all these issues are only during bom creation, but the same function module works perfect during bom maintenance.
CSAP_MAT_BOM_CREATE is also used to create only one alternative bom. but this can be only one number - 01 (default). but, you cannot maintain a bom using this function module. you need to use CSAP_MAT_BOM_MAINTAIN for bom maintenance.
to create any number of alternative bom for a material, plant and bom usage combination... you need to use the function module BAPI_MATERIAL_BOM_GROUP_CREATE. but... you cannot maintain any bom or create object dependencies for line items using this function module.
summary:
to create a bom.. use BAPI_MATERIAL_BOM_GROUP_CREATE
to read a bom.. use CSAP_MAT_BOM_READ
to maintain a bom.. use CSAP_MAT_BOM_MAINTAIN.
to create object dependency.. use CSAP_MAT_BOM_OPEN , CSAP_BOM_ITEM_MAINTAIN , CSAP_MAT_BOM_CLOSE. -
Dear Friends,
I am working on 3.0F Version.I have a requirement where when there is an update in the BOM from the 3rd party system, that changed field or quantity should be updated in the BOM.
I tried using CSAP_MAT_BOM_MAINTAIN and when I enter the material Number,Plant and BOM Usage...the FM goes to a Short Dump....
'' ABAP/4 runtime error CALL_FUNCTION_CONFLICT_LENG
The call to the function module "CSAP_MAT_BOM_MAINTAIN" is incorrect:
In the function module interface, you can specify only
fields of a specific type and length under "T_STPO".
Although the currently specified field
"%_OT_STPO[]" is the correct type, its length is incorrect.''
But I've tried to use the same Function Module in ECC 5.0 and it works perfectly fine and I am able to update the records.
Did anybody face a similar problem with 3.0 Version ??How to rectify this ??
Is there any other alternative or a solution for my problem ??
Please share your thoughts.
Warm Regards,
LakshmiHI,
I know it's a old subject but i just find the solution so to update long text feel the field
object_id in the table typed csltx_line for all the line you want to put in the header
with the below value:
* object_id = 0: Stücklistentext (STZU) (-> CS_DI_BOM_UPDATE)
* = 1: Alternativentext (STKO)
* = 2: Positionstext (STPO)
Regards -
It did not insert the materials in the BOM using 'CSAP_MAT_BOM_MAINTAIN'
Hi!
We developed a ABAP technical maintenance BOM.
In the program.
Before, we got current BOM and eliminated all related items.
Routine below.
LOOP AT INTO it_stpo wa_stpo.
MOVE-CORRESPONDING TO wa_stpo wa_stpo_i.
wa_stpo_i-id_itm_ctg = wa_stpo-item_categ.
wa_stpo_i-id_item_no = wa_stpo-item_no.
wa_stpo_i-id_comp = wa_stpo-component.
wa_stpo_i-fldelete = 'X'.
APPEND TO wa_stpo_i it_stpo_i.
ENDLOOP.
CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
EXPORTING
Stuff = pv_matnr
plant = p_werks
bom_usage = p_tplis
Alternative = p_altlis
VALID_FROM = v_valid_from
i_stko = pv_wa_stko
TABLES
t_stpo = it_stpo_i.
After , we inserted new materials in the BOM using the same function .
routine below
LOOP AT INTO it_tab_i wa_tab_i ins_up_del WHERE = '1 ' OR
ins_up_del = '2 ' .
wa_stpo_i - item_categ = ' L' .
wa_stpo_i -component = wa_tab_i - matnr_pri .
v_menge_i = wa_tab_i - menge ( 9 ) .
v_menge = v_menge_i / 1000 .
WRITE TO v_menge wa_stpo_i - comp_qty .
wa_stpo_i - comp_unit = " KG " .
wa_stpo_i - issue_loc = " COS " .
APPEND TO wa_stpo_i it_stpo_i .
ENDLOOP .
* Including new materials in the BOM .
CALL FUNCTION ' CSAP_MAT_BOM_MAINTAIN '
EXPORTING
Stuff = pv_matnr
plant = p_werks
bom_usage = p_tplis
Alternative = p_altlis
VALID_FROM = v_valid_from
i_stko = pv_wa_stko
IMPORTING
fl_warning = v_fl_warning
TABLES
t_stpo = it_stpo_i
EXCEPTIONS
error = 1
OTHERS = 2 .
But the new materials were not inserted.
Could you help me what is missing in the routine ?
Thanks.Hi!
We found the problem.
The problem was in the fields ID_ITM_CTG, ID_ITEM_NO and ID_COMP.
They were not cleaned when we were inserting the new materials in the BOM. -
Running CSAP_MAT_BOM_MAINTAIN with JCo, is it possible?
Hello,
I am trying to use CA-PLM BAPI:s by the Java Connector but CSAP_MAT_BOM_MAINTAIN gives constant exception to my application:
JCO.AbapException: (126) ERROR: Terminate processing
At the same time for example BAPI_MATERIAL_SAVEDATA works fine.
Do You have any ideas what is the problem with the bom function, could it be used by the JCo or is there alternative BAPI for that?
regards,
aHello
seems to me that this error comes from SAP so check if you call the BAPI with the right params (also try in directly in SAP to test BAPI with given parameters in SE37 and see if an ABAP exception is raised)
See JCO Docs:
public void execute(JCO.Function function)
Executes the function on the remote server synchronously
Parameters:
function - the function to execute on the remote server
Throws:
JCO.AbapException - thrown if something went awry in the called function.
JCO.Exception - thrown if something went wrong during communication, marshalling, etc.
unfortunately all exception from JCo are derived from RuntimeException, so they are unchecked and the Java compiler doesn't force you to catch them.
try something like this
JCO.Client client = .....
try {
client.execute (function)
} catch (JCO.AbapException ex) {
System.out.println ("Exception raised by SAP System");
System.out.println (ex.getKey() + ": " + ex.getMessage());
Regards
franz
reward points if useful -
Error in creating Alternative BOM using IDOC_INPUT_BOMMAT
Hi all,
I am trying to create an Alternative BOM using IDoc BOMMAT03.I have checked this IDoc will use FM IDOC_INPUT_BOMMAT inside.
In this function module, it is using FM CSAP_MAT_BOM_CREATE and CSAP_MAT_BOM_MAINTAIN to create and change.
This FM is allowing to create an Alterative BOM = '01' but it is not creating for Alt BOM = '02'.
Can anyone provide inputs on this .
Regards
SathibabuHai Guy,
use below code for Alternate BOM with sub item .
Part 1.
DATA: bom_header LIKE cad_bicsk,
bom_item type table of cad_bom_item WITH HEADER LINE,
bom_sub_item type table of cssubitem WITH HEADER LINE,
dms_class_data type table of cls_charac WITH HEADER LINE,
sap_field_data type table of rfcdmsdata WITH HEADER LINE,
e_return LIKE cad_return-value,
e_message LIKE message-msgtx,
e_message_len LIKE cad_return-message_len.
DATA v_ITEM TYPE I.
TYPES : BEGIN OF ty_data,
level TYPE i,
matnr TYPE cad_bicsk-matnr,
werks TYPE werks_d,
usage TYPE stlan,
qty TYPE cad_bom_item-menge,
fqty type fmeng, " Quantity is Fixed
sub_upmng type upmng,
text type cad_bicsk-ztext,
END OF ty_data.
DATA : it_data TYPE TABLE OF ty_data ,
wa_data TYPE ty_data.
**---selection screen
PARAMETERS:p_file TYPE ibipparms-path OBLIGATORY.
**---f4 help for the file from PC
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM get_f4help.
*--start-of-selection .
START-OF-SELECTION.
PERFORM upload_file_itab.
CLEAR: bom_header, bom_item, bom_sub_item.
REFRESH: bom_item, bom_sub_item.
data : v_lineitem type SPOSN value '0000',
v_slineitem type SPOSN value '0'.
LOOP AT it_data INTO wa_data.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-matnr
IMPORTING
output = wa_data-matnr.
IF wa_data-level = 0.
* fill BOM header
clear bom_header.
bom_header-matnr = wa_data-matnr. "'000000000200000016'.
* bom_header-stlal = '1'. " Alternative Bom
bom_header-werks = wa_data-werks. "'1000'.
bom_header-stlan = wa_data-usage."'3'.
bom_header-bmeng = wa_data-qty.
bom_header-cadkz = 'X'.
bom_header-stktx = wa_data-text.
* bom_header-ztext = wa_data-text.
bom_header-datuv = '01.10.2010'.
ELSEIF wa_data-level = 1.
* fill item
v_lineitem = v_lineitem + 10.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = v_lineitem
IMPORTING
output = v_lineitem.
* bom_item-upskz = 'X'. " If We hav the Sub items Enable it.
bom_item-idnrk = wa_data-matnr. "'000000000200000017'.
bom_item-posnr = v_lineitem.
bom_item-postp = 'L'.
bom_item-menge = wa_data-qty. "'1'.
bom_item-fmeng = wa_data-fqty.
APPEND bom_item.
CLEAR: bom_item.
*** fill sub item
CLEAR V_ITEM .
v_slineitem = v_slineitem + 1.
ELSEIF wa_data-level = 2.
* V_ITEM = V_ITEM + 1.
* bom_sub_item-posid = v_slineitem.
* bom_sub_item-ebort = 'test'.
* bom_sub_item-upmng = wa_data-sub_upmng.
* bom_sub_item-uposz = V_ITEM.
* bom_sub_item-uptxt = 'test'.
* append bom_sub_item.
* clear bom_sub_item.
ENDIF.
if wa_data-level = 0.
else.
at END OF LEVEL.
* Call function
CALL FUNCTION 'CAD_CREATE_BOM_WITH_SUB_ITEMS'
EXPORTING
i_bom_header = bom_header
i_auto_posnr = ''
IMPORTING
e_return = e_return
e_message = e_message
e_message_len = e_message_len
e_bom_header = bom_header
TABLES
bom_item = bom_item
bom_sub_item = bom_sub_item
dms_class_data = dms_class_data
sap_field_data = sap_field_data
EXCEPTIONS
OTHERS = 1.
refresh bom_item.
write : e_message.
ENDAT.
ENDIF.
CLEAR wa_data.
endloop. -
Create BOM alternative via BAPI
How can we create a BOM alternative via BAPI?
I now use CSAP_MAT_BOM_MAINTAIN but then I get the following error:
BOM already exists for 1234 W041 9
I do not want to use batch input.
Kind regards,
LieselotHi,
U can use the following BAPI'S
BAPI_MATERIAL_BOM_GROUP_CREAT
BAPI_MAT_BOM_EXISTENCE_CHECK
i hope they solve your purpose!!
thanks -
How can I assign points to the alternatives in a question?
Hi! I am building my first quiz in Captivate and I have this little problem I haven´t been able to solve. I want a make a test that meassures how stress you are att work. It looks like a survey, I´ll have about 20 or more questions with the same type of alternatives, no right or wrong alternatives, but you choose the one you agree the most with. The thing is that i want to give a value point to each alternative and be able to have a score at the end. See the example.
How often do you feel stressed att work?
1. never : 0 points
2. one a week: 2 points
3. three times a week: 3 points
4. Everyday: 4 points
Att the end, the score you get tells you how stressed you are, but instead of showing a result in term of points, you´ll get a text giving you feedback and recomendations for better health. Can I do that in Captivate? I haven´t been able to find a way to do that yet...
Thanks for any help you can give me!Hello,
Tried putting something together that could be possible, concentrated on the workflow. There will be some repetitive tasks to be done however, problem is that a click box cannot stay for a whole project, which means that a click box gets its proper ID on each slide. Will try to explain, it is up to you to judge if this is acceptable, or if you'd go better with a Flash app.
Created (for the moment, perhaps you'll need more if p.e. for Q1-Q10 you need a separate result for A and for B, result for Q11-Q20...) two user variables:
v_AClick to store the number of clicks on A-option
v_BClick to store the number of clicks on B-option
The results can then be used later on for a condition (did not write it yet).
Created a first slide with these objects:
dummy Text Caption 'Option A' (will be replaced later on with question text)
click box covering up this Text Caption, named it (ID) ClickA1 (this is the tedious part, has to be done for each CB; ClickA2, ClickA3...)
dummy Text Caption 'Option B' (will be replaced later on with question text)
click box covering up this Text Caption, named it (ID) ClickB1 (this is the tedious part, has to be done for each CB; ClickB2, ClickB3...)
imported a 'sign' to be showed after the user clicked into the Library, and put an instance to the right of each Text Caption, those were labeled VinkA and VinkB. Very important: set those instances to 'Show for the entire project', which avoids to have them duplicated to each slide, we will hide and show them as necessary.
button 'Next' which on Succes jumps to next slide.
The blue Text Caption was for me, to check if the actions were functioning, shouldn't be there in the end file.
I created a first Advanced action, labeled it HideVink (sorry for the Dutch, Vink = the green symbol), to be triggered on entering the slide:
Hide VinkA
Hide VinkB
Second/third action, labeled A_Action1/B_Action1 to be triggered by clicking on the ClickA1/ClickB2 with these actions:
increment v_AClick/v_BClick with 1
hide the other clickbox, thus ClickB1/ClickA1 to avoid that the user could click on both options
show AVink/BVink
Here is an example, action A_Action1
Those two actions have to be duplicated for each Question slide (A_Action2, B_Action2,....). What has to be changed in the duplicates is only the number of the Click Box, that is why I labeled them to make the process easier.
Now I duplicated the slide as many times as necessary. The actions for button and entering slide are OK, but the actions for the click boxes have to be adapted (tedious).
Why did I use 'dummy' Text Captions: I should export (File menu) the Text Captions to a Word-document, change the dummy texts (left column) to the real captions (much easier in one doc) and re-import them into the CP-file.
That was my homework, as promised. Hope it helps, even if you choose to go the Flash-way after all.
Lilybiri -
Alternative Periods in Report Painter
I'm trying to create a report painter report for labour efficiency, it compares actual labour confirmations to a statistical key figure for payroll hours.
I have the basic elements, but my problem is this. We currently run our accounts on a calendar month basis, so we have 12 periods in FI. This report is required on a weekly basis for each weeks payroll. Is it possibly to report totals for a given week, when that is not your accounting period?
I can't see any obvious characterisics that will give me a weekly total of each figure, but I'm wondering if it os possible to define alternative periods (e.g. 52/53 week years ending each sunday for a period, and bring that in as a row characteristic).
Has anybody managed to achieve anything like this, and if so how?
Postings can occur anytime in the week, so I don't think posting date is an option, but may be if you can specify ranges that can be logically extrapelated in the report (i.e. Mon-Sun).
Thanks for any advice on this
GrahamHas anybody got any comments or advice on this?
Graham -
A semiautomatic alternative to /etc/fstab
This is probably highly redundant... the chances are, someone will likely say "XYZ does that for you and you can configure it in 5 minutes", but here goes anyways.
I wanted a simple way to mount the disks in my computer to the same location regardless of where they were in the system (thus via UUID) but what I *didn't* want was to have to copy/type the UUID myself. The following possibly shaky bash script is the result.
First, however, a (very real-world) demonstration of its functionality!
/disks/ + ./domount
Using scriptdir "/disks/.mountscripts".
Running mount... [ok]
[Disk ST3250620A_5QE4M336]
group0-root -> /disks/250gb: [ok]
38067a33-0556-4cab-a5c5-c96b313bd174 -> /disks/250gb/boot: [ok]
21D4-2E62 -> /disks/250gb/data: [ok]
group0-home -> /disks/250gb/home:
== mount error ==
mount: wrong fs type, bad option, bad superblock on /dev/mapper/group0-home,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
=================
[R]etry/Skip [P]artition/Skip [D]isk/[Q]uit? q
/disks/ + fsck.jfs /dev/mapper/group0-home
fsck.jfs version 1.1.15, 04-Mar-2011
processing started: 11/10/2011 20:28:10
Using default parameter: -p
The current device is: /dev/mapper/group0-home
Block size in bytes: 4096
Filesystem size in blocks: 52099072
**Phase 0 - Replay Journal Log
Filesystem is clean.
/disks/ + ./domount
Using scriptdir "/disks/.mountscripts".
Running mount... [ok]
[Disk ST3250620A_5QE4M336]
group0-root -> /disks/250gb: (already mounted)
38067a33-0556-4cab-a5c5-c96b313bd174 -> /disks/250gb/boot: (already mounted)
21D4-2E62 -> /disks/250gb/data: (already mounted)
group0-home -> /disks/250gb/home: [ok]
group0-var -> /disks/250gb/var: [ok]
partition1.vfat -> /disks/250gb/home/backup/80gb/mnt/partition1.vfat: [ok]
partition2.vfat -> /disks/250gb/home/backup/80gb/mnt/partition2.vfat: [ok]
partition3.vfat -> /disks/250gb/home/backup/80gb/mnt/partition3.vfat: [ok]
partition4.ext3 -> /disks/250gb/home/backup/80gb/mnt/partition4.ext3: [ok]
data2 -> /disks/250gb/home/backup/32gb-2/mnt/data2: [ok]
[Disk ST340014A_5MQ4HB90]
0854-08DE -> /disks/20gb-1/data-1: [ok]
4846-D7E2 -> /disks/20gb-1/data-2: [ok]
3070DB1E70DAE99C -> /disks/20gb-1/winnt: [ok]
38BB-158D -> /disks/20gb-1/pool: [ok]
[Disk WDC_WD800BB-22J_WD-WCAM9H677098]
e336c404-fca8-4f2b-9c75-81c22f339741 -> /disks/80gb: [ok]
4738-E723 -> /disks/80gb/vfat: [ok]
a827cfa1-08cf-4a24-a989-aae94ea0801b -> /disks/80gb/boot: [ok]
7bb5df89-3a90-4c92-8aa7-a94271806087 -> /disks/80gb/var: [ok]
09b652b7-4f5e-4895-8464-6f972a44fdd6 -> /disks/80gb/home: [ok]
a2534aa6-b70f-442d-805e-365ee626d4be -> /disks/80gb/tmpspace: [ok]
4871-993D -> /disks/80gb/tmpspace2: [ok]
386a2a83-22e2-425c-bd48-cb0a1fad8a87 -> /disks/80gb/pool: [ok]
/disks/ +
Here's the script! (I can pastebin it if neccessary)
#!/bin/bash
# ohai from i336 :P <[email protected]>
# Oct-Nov 2011
# Public domain, no warranty. Be sure to use the "t" flag on the first run!
# This program has two modes: scan mode and run mode.
# Configuration
# =============
# You first need to create/go into the directory you want to mount your disks
# in, such as /mnt (I use /disks), and create the subdirectory ".mountscripts", or
# alternatively "programname-mountscripts" (the second directory bearing the
# name of the program/symlink, a simple mechanism to implement some flexibility).
# You can substitute any created symlinks whereever "./domount" is mentioned.
# The existance of this directory indicate that this is the work directory.
# (For added flexibility, the program will look for the second directory, the
# one bearing its name, first, then fall back on ".mountscripts" if this is not
# found.)
# Scan Mode
# =========
# After creating this directory for the first time you will want to run
# "./domount s" to generate the mountscripts into the mountscript directory
# (which is selected as specified above).
# Run Mode
# ========
# At this point, go into the mountscript directory, open all the files you find
# there in a text editor, and add in the mountpoints you want to use after the
# UUID parameter to 'partop' (an internal function defined in this file for the
# scripts).
# ** The first time you simply MUST run "./domount t" in order to see that the
# 'mount' commands are correct! **
# After this is done, run "./domount" and it will go ahead and mount the disks.
# Run "./domount u" and it will unmount everything. (No options exist for
# individual partitions as yet).
# Limitations
# ===========
# * If you use domount to mount loopback images inside real partitions and the
# real partitions are also mounted by domount, well, domount will try to
# unmount them in the same order as when it mounts... and it will break.
# Simple solution: skip however many real [p]artitions you have, then
# re-run domount again. :)
# * If you change a disk (eg add a partition), well, you'll have to delete the
# file for that disk, re-scan (domount will not touch the other scripts) then
# re-add your partitions back in. This program wasn't really designed to deal
# with that kind of situation :)
# * This program does not support LVM partitions - quite frankly, it doesn't
# even realize such things exist. Thus you will not find any LVM partitions
# listed in the generated scripts, or any "LVM partitions ignored"
# messages - indeed, if you only have LVM partitions on a given disk, the
# resulting syntactically incorrect script will contain an 'if' block with
# no content and the shell will produce an error.
toollist=
needtool=0
for tool in find lsblk blkid cfdisk xargs grep tail mountpoint; do
type -P $tool > /dev/null 2>&1
if [ $? -eq 0 ]; then
toollist="${toollist} ${tool}"
else
toollist="${toollist} [${tool}]"
needtool=1
fi
done
if [ $needtool -eq 1 ]; then
echo "This program requires the following tools in order to run. Those marked with"
echo "brackets cannot be found (using \`type') and their containing packages"
echo "likely need to be installed."
echo $toollist
exit 1
fi
sizes=(bytes KB MB GB TB)
progname=$(basename $0)
if [ -d ".mountscripts" ]; then
scriptdir="$(pwd)/.mountscripts"
elif [ -d ".${progname}-mountscripts" ]; then
scriptdir="$(pwd)/.${progname}-mountscripts"
fi
if ([[ ! -d "${scriptdir}" ]] && [[ "$1" != "s" ]]) || [[ "$1" == "h" ]]; then
cat << EOF
usage: $0 [s] [t]
s = scan
t = test run (USE THIS THE FIRST TIME AFTER YOU HAVE DONE A SCAN)
EOF
exit 1
fi
if [[ "$1" = "s" ]]; then
echo -n "Scanning disk tables... (by name)"
parttable=(); while IFS= read -r line; do parttable+=("$line"); done < \
<(find /dev/disk/by-id/ -name "scsi-SATA*" -name "*-part*" -type l | xargs stat -L -c "%t-%T %n")
echo -n ", (by UUID)"
uuidtable=(); while IFS= read -r line; do uuidtable+=("$line"); done < \
<(find /dev/disk/by-uuid/ -type l | xargs stat -L -c "%t-%T %n")
echo -ne " [ok]\nRunning blkid..."
blkidtable=(); while IFS= read -r line; do blkidtable+=("$line"); done < \
<(blkid)
echo -ne " [ok]\nRunning lsblk (uno momento)..."
lsblktable=(); while IFS= read -r line; do lsblktable+=("$line"); done < \
<(lsblk -bro name,size,fstype,model | grep -v group | tail -n +2)
echo -e " [ok]\n"
if [ ${#parttable[@]} -ne ${#uuidtable[@]} ]; then
echo 'Something is very wrong with either this program'
echo 'or your disk configuration. O.o'
exit 1
fi
echo -e "Using scriptdir \"${scriptdir}\".\n"
echo -ne "\e[1GCompiling mapping table... [ ]\e[?25l"
max=$[${#parttable[@]}*${#parttable[@]}]
runindex=0
for ((i = 0; i < "${#parttable[@]}"; i++)); do
partsplit=(${parttable[$i]})
devok=0
devname="$(readlink -f ${partsplit[1]})"
partsize=
for uuid in "${uuidtable[@]}"; do
uuidsplit=($uuid)
c=$[((runindex*43)/$[max-1])]
echo -ne "\e[29G"
if [ $c -gt 0 ]; then eval \printf "%.s#" {0..$c}; else echo -n '.'; fi
if [ $c -lt 43 ]; then eval \printf "%.s." {$[c+1]..43}; fi
((runindex++))
if [[ "${partsplit[0]}" = "${uuidsplit[0]}" ]]; then
partlabel=
devok=1
for entry in "${blkidtable[@]}"; do
if [[ "${entry:0:$[${#devname}+9]}" != "${devname}: LABEL=\"" ]]; then continue; fi
partlabel="${entry:$[${#devname}+9]}"
partlabel=$(echo -n $(echo $partlabel | cut -d'"' -f1))
done
for entry in "${lsblktable[@]}"; do
entry=($entry)
if [[ "/dev/${entry[0]}" != "$devname" ]]; then continue; fi
partsize=${entry[1]}
parttype=${entry[2]}
done
if [ ! partsize ]; then
echo "$0: error: cannot determine partition size for $devname"
exit 1
fi
devline="${partsplit[1]:26} ${uuidsplit[1]:18} ${partsize} ${parttype}${partlabel:+ $partlabel}"
map[${#map[@]}]="$devline"
fi
done
if [ $devok -eq 0 ]; then
checkparttable[${#checkparttable[@]}]="${parttable[$i]#* }"
fi
done
echo -e "\e[?25h\e[75Gdone.\n"
if [[ ${#checkparttable[@]} -gt 0 ]]; then
cat << EOF
Warning: The following partitions do not have matching UUID entries
in /dev/disk/by-uuid/.
Linux seems to be quite smart, and won't list UUIDs for LVM
members, partitions \`mount' cannot mount without the -t flag,
or extended partition headers, but /dev/disk/by-id/ will still
list them. So these are probably not a problem but may still
warrant a double-check; if these contain valid filesystems you
will need to insert them manually since their UUIDs cannot be
calculated.
EOF
for partition in "${checkparttable[@]}"; do
echo " >> $(readlink -f $partition) (/dev..by-id/${partition:26})";
done
echo
fi
find /dev/disk/by-id/ -name "scsi-SATA*" -not -name "*-part*" -type l | while read disk; do
scriptfile="${scriptdir}/${disk:26}.mount.sh"
rm -f "${scriptfile}"
if [ ! -f "${scriptfile}" ]; then
echo -ne "No mountscript found for disk ID \"${disk:26}\", creating one...\nRunning cfdisk... "
cfdtable=(); while IFS= read -r line; do cfdtable+=("$line"); done < \
<(cfdisk -Ps $disk | grep -v "Free Space" | grep -v "Unusable" | tail -n +6)
echo -ne "[ok]\nRunning smartctl... "
smartctlinfo="$(smartctl -i $disk)"
diskdevname="$(readlink -f ${disk})"
diskdevname=${diskdevname:5}
disk="${disk:26}"
disktable[${#disktable[@]}]="${disk}"
tmp=
diskparttable=
for entry in "${lsblktable[@]}"; do
entry=($entry)
if [[ "${diskdevname}" != "${entry[0]}" ]]; then continue; fi
devicename=$(echo -n $(echo "${entry[@]}" | cut -d' ' -f3-))
done
echo -e "# Script generated by domount at $(date +'%T on %D (MM/DD/YY)') for disk \"${devicename}\"\n" > "${scriptfile}"
echo '# '$(echo "$smartctlinfo" | grep '^Model Family:') >> "${scriptfile}"
echo '# '$(echo "$smartctlinfo" | grep '^Device Model:') >> "${scriptfile}"
echo -e '# '$(echo "$smartctlinfo" | grep '^User Capacity:')"\n" >> "${scriptfile}"
for part in "${map[@]}"; do
if [[ "${part:0:$[${#disk}+1]}" != "${disk}-" ]]; then continue; fi
diskparttable="${diskparttable}${part}\n";
done
mapfile -t diskparttable < <(echo -ne "${diskparttable%%\\n}" | sort -n -k1.$[${#disk}+6]n)
echo -ne "if diskexists ${disk}; then\n\t\n" >> "${scriptfile}"
for part in "${diskparttable[@]}"; do
partsplit=($part)
parttype=
for line in "${cfdtable[@]}"; do
line=($line)
if [[ "X${partsplit[0]:${#disk}+5}X" != "X${line[0]}X" ]]; then continue; fi
parttype="${line[1]}"
done
if [[ "X${parttype}X" = "XX" ]]; then
echo "$0: error: Cannot parse cfdisk output"
rm -f "${scriptfile}"
exit 1
fi
echo -ne "\t# Partition: #${partsplit[0]:${#disk}+5} (${parttype}, ${partsplit[3]}" >> "${scriptfile}"
if [[ "${partsplit[3]}" = "swap" ]]; then
echo -n " - Skipping" >> "${scriptfile}"
fi
echo -n "); Size: " >> "${scriptfile}"
sizeidx=0
size=${partsplit[2]}
while [ $size -gt 0 ]; do
sizetext="${size}${sizes[$sizeidx]} ${sizetext}"
size=$(($size/1024))
((sizeidx++))
done
sizetext=($sizetext)
for ((i = 0; i < 2; i++)); do
if [ $i -eq 1 ]; then echo -n ' (' >> "${scriptfile}"; fi
if [[ "${sizetext[$i]: -1:1}" = "s" ]]; then
echo -n "${sizetext[$i]:0:-5} bytes" >> "${scriptfile}"
else
echo -n "${sizetext[$i]:0:-2} ${sizetext[$i]: -2:2}" >> "${scriptfile}"
fi
if [ $i -eq 1 ]; then echo -n ')' >> "${scriptfile}"; fi
done
if [[ "X${partsplit[4]}X" != "XX" ]]; then
echo -n "; Label: \"" >> "${scriptfile}"
echo $(echo -n "${part}" | cut -d' ' -f5-)"\"" >> "${scriptfile}"
else
echo >> "${scriptfile}"
fi
if [[ "${partsplit[3]}" != "swap" ]]; then
echo -e "\tmountpart /dev/disk/by-uuid/${partsplit[1]} \n\t" >> "${scriptfile}"
else
echo -e "\t" >> "${scriptfile}"
fi
done
echo "fi" >> "${scriptfile}"
echo -e "[ok]\nSuccess!\n"
#echo ---; cat $scriptfile; echo ---
else
echo "Script found for disk ID ${disk}"
fi
done
exit
fi
trap 'echo; exit' SIGINT
echo -ne "Using scriptdir \"${scriptdir}\".\nRunning mount..."
mapfile -t mounttable < <(mount)
echo -e " [ok]"
function spin() {
trap 'echo -e "\e[?25h"' SIGINT SIGQUIT SIGKILL
echo -ne "\e[?25l"
if [[ $unicode -eq 1 ]]; then s=$(printf \\u2580\\u259C\\u2590\\u259F\\u2584\\u2599\\u258C\\u259B); m=8; d=0.03; else s='/-\|'; m=4; d=0.07; fi
("$@" & pid=$! ; c=1; while ps -c $pid 2>&1>/dev/null; do echo -ne "\e[s${s:c:1} \e[u"; c=$[c+1]; test $c -eq $m && c=0; sleep $d; done)
echo -ne "\e[?25h"
trap SIGINT SIGQUIT SIGKILL
function diskexists {
disk=/dev/disk/by-id/scsi-SATA_${@}
if [[ ! -L $disk ]]; then
echo "(Disk $0 is not installed)"
else
echo "[Disk ${1}]"
fi
function partop {
if [[ $mode -eq 1 ]]; then
while true; do
echo -n "Unmounting ${1##*/}... "
if ! mountpoint > /dev/null 2>&1 $2; then
echo "(Not mounted, or not a mountpoint)"
break;
fi
if [ ! -d $2 ]; then
echo "error: Not a directory!"
break
fi
cmd="umount $1"
if [[ ! $testmode ]]; then
output="$(${cmd} 2>&1)"
err=$?
else
echo "{would run: ${cmd}} "
fi
if [[ $err = 0 ]]; then
if [[ ! $testmode ]]; then echo "[ok]"; fi
return
else
echo -e "\n== umount error =="
echo -n "${output}"
echo -e "\n=================\n"
c=X;
while [[ ! $c =~ (R|r|P|p|D|d|Q|q) ]]; do read -sn1 -p"[R]etry/Skip [P]artition/Skip [D]isk/[Q]uit? " c; echo $c; done
echo
case $c in
D|d) skipdisk=1; break ;;
P|p) break ;;
Q|q) exit ;;
esac
fi
done
else
if [[ $skipdisk = 1 ]] && [[ $newdisk = 0 ]]; then return; fi
err=0
skipdisk=0
newdisk=0
while true; do
echo -n "${1##*/} -> $2: "
if mountpoint > /dev/null 2>&1 $2; then
echo "(already mounted)"
break;
fi
if [[ $testmode == 0 ]]; then echo echo -n "Mounting"; fi
if [ ! -d $2 ]; then
echo -n " (creating dir $2"
cmd="mkdir -p $2 2>&1"
if [[ ! $testmode ]]; then
output="$(eval $cmd)"
err=$?
else
echo -n " {would run: $cmd}"
fi
echo -n ') '
fi
if [[ $err = 0 ]]; then
if [[ $testmode == 0 ]]; then echo -n '... '; fi
cmd="mount $@"
if [[ ! $testmode ]]; then
output="$(${cmd} 2>&1)"
err=$?
else
echo "{would run: ${cmd}} "
fi
else
echo
fi
if [[ $err = 0 ]]; then
if [[ ! $testmode ]]; then echo "[ok]"; fi
return
else
echo -e "\n== mount error =="
echo -n "${output}"
echo -e "\n=================\n"
c=X;
while [[ ! $c =~ (R|r|P|p|D|d|Q|q) ]]; do read -sn1 -p"[R]etry/Skip [P]artition/Skip [D]isk/[Q]uit? " c; echo $c; done
echo
case $c in
D|d) skipdisk=1; break ;;
P|p) break ;;
Q|q) exit ;;
esac
fi
done
fi
if [[ $1 = "u" ]]; then mode=1; else mode=0; fi
if [[ $1 = "t" ]]; then testmode=1; fi
scripts=(${scriptdir}/*.mount.sh)
for ((i = 0; i < ${#scripts[@]}; i++)); do
newdisk=1
. ${scripts[$i]}
if (($i < ${#scripts[@]} - 1)); then echo; fi
done
echo -ne "\e[?25h"
Hopefully someone else finds this helpful. I am aware of udev/automount; that was overkill, since the disks are always installed, and I don't need a system whose focus is on-the-fly detection of newly inserted media of whatever kind.
-i336
Last edited by i336 (2011-11-10 04:42:08)Thanks. I might use it soon...
Does it automatically make folders named after the volume labels? And does it handle the conversion of spaces and non-alphanumeric characters to octal codes?
I could read the script but it would be faster for everyone reading, if you leave the answer as a reply.
I also think that there should be some major work done on modernizing the fstab, either by replacing it with a better implementation of file system mounting or changing the file structure and adding in better handling of non-alphanumerics. I don't want to have to look up a stupid octal table every time I type in my labels. -
Adobe Creative Cloud can't signin is there alternative to downloading these programs?
I just purchased Adobe Creative Cloud and when went to sign in all it would do is sign me out in which I never got to sign in lol is there alternative way to download this software as I have Photoshop and Lightbloom
Finally, after- how long? - two months? I have uploaded the new Creative Cloud. Only to find that all the programs have been upgraded from CS6 to CC.
This ranks as the worst piece of customer-relations I've ever come across. Even though I asked for instructions the Staff member dealing with me got fed-up and just dumped me.
I kept trying - and today - finally I got it fixed.
It took 20 minutes to download, at 20Mbps! There were no intermediate instructions, I wasn't told what was happening. Suddenly the Install screen disappeared - the new Creative Cloud didn't open, I had to go find it.
Adobe - this is not good. I suggest you find the boss of this team and quietly boot them out of the door. -
Lync Reverse Proxy Alternatives
When migrating from OCS 2007 to Lync 2010, we balked Microsoft’s recommendation to deploy Forefront Threat Management Gateway (or ISA) just to get the reverse proxy services.
TMG is way too expensive and complex for such a limited, simple use case.
I didn't find much information on what people are using as free alternatives to ISA/TMG, so I decided to post this discussion in case there are others out there who are interested.
We decided to use Apache 2.2 on Windows Server 2008 R2.
Here's how we configured it:
Read here to understand what features require a reverse proxy, and follow the steps to configure your FQDNs, Network Adapters and (maybe) obtain an SSL Certificate for the reverse proxy.
http://technet.microsoft.com/en-us/library/gg398069.aspx
Download and install the latest stable release of Apache with OpenSSL on your reverse proxy server.
http://httpd.apache.org/download.cgi
We're using the same certificate on the reverse proxy that we use on our front end server (it has the appropriate SANs), so we need to convert it to PEM format for use with Apache:
Use the Certificates MMC on your front end server to export the certificate and include the private key.
Transfer the resultant .pfx file to your reverse proxy server.
Use OpenSSL to convert your .pfx file to PEM:
openssl pkcs12 -in c:\pathto\yourcert.pfx -out c:\pathto\yourcert.pem –nodes
Separate the private key from the certificate using notepad:
Open the new .pem file and cut the text from the beginning of the file through the end of the “----END RSA PRIVATE KEY----“ tag.
Save that text to a new file named
yourcert.key.
Save
yourcert.pem, which should now only include the certificate.
Copy (or move) the certificate and private key to the Apache configuration directory. We like to use: C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\extra\ssl
for storing the certificates.
Edit httpd.conf (typically in
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf) to enable and configure the proxy and SSL features:
(See http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
for more information on each directive)
Uncomment the following lines, which will enable proxy and SSL:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
Add the following lines to configure reverse proxy behavior:
#Be a reverse proxy, not a forward proxy
ProxyRequests Off
#Accept requests from any client to any URL
<Proxy *>
Order Deny,Allow
Allow from all
</Proxy>
#Set the network buffer to improve throughput
ProxyReceiveBufferSize 4096
#Configure the Reverse Proxy to forward all requests to your front end server on 4443
ProxyPass / https://yourfrontend.domain.com:4443/
ProxyPassReverse / https://yourfrontend.domain.com:4443/
#Preserve Host Headers for Lync
ProxyPreserveHost On
Optionally, configure logging directives, bindings and server name.
Save and close httpd.conf
Edit httpd-ssl.conf (typically in conf\extra):
Configure the session cache:
Uncomment:
SSLSessionCache “dbm:C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/ssl_scache”
Comment out:
SSLSessionCache “shmcb:C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)”
Locate the <VirtualHost _default_:443> tag and configure the following:
Add the following directive:
SSLProxyEngine On
Configure the path to your SSL Certificate saved in step 3-5 above:
SSLCertificateFile “C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\extra\ssl\yourcert.pem”
Configure the path to your private key saved in step 3-5 above:
SSLCertificateKeyFile “C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\extra\ssl\yourcert.key”
Optionally, configure the SSLCACertificateFile (you can download the appropriate bundle from your CA).
Optionally, configure logging directives.
Save and close httpd-ssl.conf
Restart the Apache2.2 service
Configure public DNS records and appropriate firewall rules to allow public http/https traffic to the external interface of your reverse proxy, and to allow the internal interface of
the reverse proxy to talk to the front end Lync server on 8080 and 4443.
From an external connection, test connectivity through the reverse proxy:
Test
https://dialin.company.com (friendly URL for getting dial-in information, if you’re using voice conferencing)
Test the Lync Web App by setting up an online meeting and following the URL to join the meeting.
You can force the use of the web app by appending ?sl= to the end of the meet.company.com link.
See this for more information http://blogs.technet.com/b/jenstr/archive/2010/11/30/launching-lync-web-app.aspx
Hope this information is helpful and saves some of you some money and trouble.
Please contact me if you need further clarification or see any mistakes in my notes.
Best regards,
Kenneth Walden
Enterprise Systems Supervisor
GSD&M
Austin, TXI'd like to thank you for this article. We were setting up Apache RP for Lync .... needless to say they weren't too excited to learn this new (and highly complex with lots of specific undocumented requirements) Microsoft product. Anyways, your
blog saved me a LOT of headache. I owe you big time.
AWESOME JOB.
-Greg
*****EDIT***
Decided to come back in there and post good information. We had issues with EXTERNAL and ANONYMOUS users being able to attend a meeting. The "DIALUP" url was working fine but the "MEETING" url was broken. On our WFE servers we were getting
the event error as below. Turns out that our reverse proxy was not set to "PROXYPRESERVEHOST ON". Once we put that in there ALL was good.
Notice that the MEET portion was the only thing that was really broken. So, if you can get DIALUP to work, but MEET doesn't ... your RP is working to FW the 443 to the 4443 correctly but you're RP is sending the wrong HEADER. Look for
http://10.x.x.x/meet/ or soemthing in the event logs.
Log Name: Application
Source: ASP.NET 2.0.50727.0
Date: 11/16/2011 1:26:35 PM
Event ID: 1309
Task Category: Web Event
Level: Warning
Keywords: Classic
User: N/A
Computer: OneofMyInternalWFEservers.local
Description:
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 11/16/2011 1:26:35 PM
Event time (UTC): 11/16/2011 6:26:35 PM
Event ID: b2039ecd0a62482284030f62e1e639d8
Event sequence: 129
Event occurrence: 28
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/34578/ROOT/meet-1-129658725547585993
Trust level: Full
Application Virtual Path: /meet
Application Path: C:\Program Files\Microsoft Lync Server 2010\Web Components\Join Launcher\Ext\
Machine name: MYWFE.local
Process information:
Process ID: 14204
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Exception information:
Exception type: HttpException
Exception message: Server cannot append header after HTTP headers have been sent.
Request information:
Request URL:
https://FQDN:4443/meet/MyName/456456
User host address: gatewayIP
User:
Is authenticated: False
Authentication Type:
Thread account name: NT AUTHORITY\NETWORK SERVICE
Thread information:
Thread ID: 7
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: False
Stack trace: at System.Web.HttpHeaderCollection.SetHeader(String name, String value, Boolean replace)
at Microsoft.Rtc.Internal.WebServicesAuthFramework.OCSAuthModule.EndRequest(Object source, EventArgs e)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Custom event details:
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="ASP.NET 2.0.50727.0" />
<EventID Qualifiers="32768">1309</EventID>
<Level>3</Level>
<Task>3</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2011-11-16T18:26:35.000000000Z" />
<EventRecordID>4483</EventRecordID>
<Channel>Application</Channel>
<Computer>XXXXXXXXXXXXXXXXXX</Computer>
<Security />
</System>
<EventData>
<Data>3005</Data>
<Data>An unhandled exception has occurred.</Data>
<Data>11/16/2011 1:26:35 PM</Data>
<Data>11/16/2011 6:26:35 PM</Data>
<Data>b2039ecd0a62482284030f62e1e639d8</Data>
<Data>129</Data>
<Data>28</Data>
<Data>0</Data>
<Data>/LM/W3SVC/34578/ROOT/meet-1-129658725547585993</Data>
<Data>Full</Data>
<Data>/meet</Data>
<Data>C:\Program Files\Microsoft Lync Server 2010\Web Components\Join Launcher\Ext\</Data>
<Data>SNKXS300</Data>
<Data>
</Data>
<Data>14204</Data>
<Data>w3wp.exe</Data>
<Data>NT AUTHORITY\NETWORK SERVICE</Data>
<Data>HttpException</Data>
<Data>Server cannot append header after HTTP headers have been sent.</Data>
<Data>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</Data>
<Data>/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</Data>
<Data>10.71.1.1</Data>
<Data>
</Data>
<Data>False</Data>
<Data>
</Data>
<Data>NT AUTHORITY\NETWORK SERVICE</Data>
<Data>7</Data>
<Data>NT AUTHORITY\NETWORK SERVICE</Data>
<Data>False</Data>
<Data> at System.Web.HttpHeaderCollection.SetHeader(String name, String value, Boolean replace)
at Microsoft.Rtc.Internal.WebServicesAuthFramework.OCSAuthModule.EndRequest(Object source, EventArgs e)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
</Data>
</EventData>
</Event> -
What is a quick alternative to launching an enterprise DPS app if Apple Store rejects the App? We are under a major deadline and can't wait for Apple to approve. We want to host the app elsewhere. How do we host our DPS app on our client's website? Thanks.
Unless I misunderstand the question, you can't do what you're asking to do. Apple doesn't allow you to bypass their store and host public apps on a website. The exception is an enterprise app, which requires an Enterprise account with both Apple and Adobe. This type of enterprise app can be distributed only within the company. If that's what you want to do, you can learn more here:
Digital Publishing Suite Help | Creating viewer apps for private distribution
Distributing enterprise iOS viewer applications with Digital Publishing Suite | Adobe Developer Connection
Another option is to add the development app to several devices and use those for your demo.
Maybe you are looking for
-
Is there a way to see all your new mail from multiple accounts on one page?
I'm currently receiving emails from four different accounts on my iPhone. I love getting all my emails like this, but it would be even nicer if I didn't have to navigate between all the different accounts.
-
Hi everyone, Does anyone know if you can change the size (resolution) of the automatically generated clip proxies? FCServer creates 384x216 Quicktimes, which are OK for basic viewing - but on our high res monitors, I'd prefer something a little bigge
-
How to change style/colour of all hyperlinks, globally
I'd like to change the default style for all hyperlinks (the blue underline thing doesn't work with the template I'm using) but I can't seem to find a way of doing it. It'd be nice if there was a character style that could be changed globally. Also,
-
HT204380 It says my password has changed
I am trying to get started with Facetime and it says my Apple Id or password has changed so it will not let me sign in.
-
BlackBerry Leather Holster for 9720? Or can I use the one for Q10
Hey Guys, I am looking for a BlackBerry Leather Holster for my 9720 but I dont find any. What you guys are using? Do you know if the BlackBerry Leather Holster for Q10 work ok with the 9720 or any other BlackBerry Leather Holster that I can use? I re